文件描述符状态标志

目前只有一种文件描述符状态标志FD_CLOEXEC,它的作用就是标志着执行exec时该文件描述符会不会主动关闭。如果清除了该标志,就表明执行exec时该文件描述符不会关闭。系统的默认操作是在exec后仍保持这个文件描述符为打开状态。

dup、dup2和fcntl对文件描述符状态标志的影响

1.新描述符的执行时关闭标志总是由dup函数清除,这样当执行exec时新描述符保持打开状态。

2.先看一下dup2函数:int dup2(int fd, int fd2)。可由fd2指定新描述符的值,如果fd2已经打开了,则先将其关闭。如果fd2等于fd,则dup2返回fd2,而不关闭它(不改变fd的文件描述符状态标志)。否则fd2的文件描述符状态标志FD_CLOEXEC被清除,这样fd2在进程调用exec时是打开状态。

3.如果是用fcntl函数复制的文件描述符(F_DUPFD),新描述符有它自己的一套文件描述符标志,其FD_CLOEXEC文件描述符标志被清除(这表示该描述符在exec时仍保持有效)。如果是用F_DUPFD_COLEXEC负责文件描述符,则可以设置和新描述符相关联的文件描述符状态标志FD_CLOEXEC(置1)。

下面是程序:

首先,先把fd的文件描述符状态标志置1,然后调用dup,可以看见新描述符的文件描述符状态标志清0了。

其次,调用dup2函数,使它的fd2参数等于fd参数,可以看见函数直接返回fd,并且没有修改fd的文件描述符状态标志。

然后,再次调用dup2函数,使fd != fd2,可见新的文件状态描述符标志清0了。

再者,用参数F_DUPFD调用fcntl,可见新文件状态描述符状态标志清0了。然后用FD_DUPFD_CLOEXEC调用fcntl复制文件描述符,可见不管fd的文件状态描述符标志是1还是0,新文件状态描述符标志都为1。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值