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

系统默认定义了标准输入

#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>
#define	FILE_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:3
After Create:4
After Dup:5
Delete a fd and Create New:3


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值