Linux:文件系统

1.文件描述符

我们学习open的时候,就知道open成功的返回值是一个文件描述符。同时它也是一个小整数。

文件描述符是一个数字;一个数字是如何描述文件的呢?
         一个进程要对所有的打开的文件进行管理,先将文件描述起来,然后组织进行管理,进程中对文件进行描述的结构体叫file(struct files),进程使用了一个结构体数组来组织这些描述,而文件描述符就是这个结构体数组的下标。

         Linux进程默认情况下会有三个缺省打开的文件描述符,分别是标准输入0、标准输出1、标准错误2。

看代码:

int main()
{
	int fd = -1;
	fd = open("./tmp.txt",O_RDWR|CREAT);
	if (fd < 0)
	{
		perror("open error");
		return -1;
	}
	printf("fd=[%d]\n", fd);
	fflush(stdout);
	close(fd);
	return 0;
}

我们编译,运行发现fd=3;

当我们关闭0/2时

int main()
{
	int fd = -1;
        close(0);
        //close(2);
	fd = open("./tmp.txt",O_RDWR|CREAT);
	if (fd < 0)
	{
		perror("open error");
		return -1;
	}
	printf("fd=[%d]\n", fd);
	fflush(stdout);
	close(fd);
	return 0;
}

得到的结果就是fd=0(2);

所以文件描述符的分配规则是:寻找最小的未使用的下标(最小未使用分配原则)。

重定向

当我们关闭1,编译,运行后发现,什么也没有出现当我们打开所对应的文件的时候,发现fd=1被写入到tmp.txt文件当中,

当我们close(1)后,标准输出就关闭了,所以输出的内容都被重定向到3号文件描述符对应的file*,而3号file*正是我们open的,所以就被写入到tmp.txt中了,不会再写到标准输出中取。
 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值