[unix]文件描述符是个啥?

来源:互联网 发布:深入理解大数据微盘 编辑:程序博客网 时间:2024/04/29 14:12

系统默认定义了标准输入

#define  STDIN_FILENO  0

标准输出

#define STDIN_FILENO 1

错误输出 

#define STDERR_FILENO 2


在unix系统 打开文件进行操作都需要文件描述符,文件描符简单的说就是身份证ID。

系统维护一个文件表 该文件表里面存放的是 文件描述符 和地址 ,地址指向具体文件操作定义 

通过使用文件描述符 可以索引到文件操作


系统默认提供了 0~2的文件描述符

之后的 当我们进行 open,create等操作的时候 自动添加进表

所以int creat(const char * ,mode_t)返回的文件int 就是你所进行操作的文件的唯一身份标示,

然后你只要拿着这个ID 然后告诉系统给我找xx


write(int fd,char *buf,int lenght) 通过fd得到准确文件 然后写入


当我们新建creat,打开open 之后,得到的fd 是从3开始的  因为前面的三个被系统占了

在OS X系统下测试 文件描述符表 自增,当释放close之后,fd变成-1

如果再继续新建 则填补之前的空缺。


#include <stdio.h>#include <fcntl.h>#include <unistd.h>#defineFILE_MODE(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)int main(void){    int fd;    fd=creat("file.hole", FILE_MODE);     printf("After Create:%d\n",fd);    int fd2=creat("file.hole", S_IREAD);    printf("After Create:%d\n",fd2);    int fd3=dup(fd);    printf("After Dup:%d\n",fd3);    close(fd);    int fd4=dup(fd2);    printf("Delete a fd and Create New:%d\n",fd4);}

结果如下

After Create:3After Create:4After Dup:5Delete a fd and Create New:3


0 0
原创粉丝点击