这个嵌套的fcntl做什么?

时间:2017-11-23 18:15:02

标签: c

我在书籍serious-cryptography-practical-modern-encryption中找到了这段代码。

嵌套fcntl做什么? 获取文件描述符并用FD_CLOEXEC对其进行Ored,我不清楚我在这里发生了什么。

#ifndef O_CLOEXEC 
   fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);

为清晰起见,省略了其他代码。

2 个答案:

答案 0 :(得分:5)

  

获取文件描述符

不,它获取文件描述符的标志。请参阅fcntl() manual page。外部调用然后设置这些标志,另外设置FD_CLOEXEC。这可确保在调用exec()系列的函数时(即,当用新程序图像替换该过程时)关闭文件。这是一种安全措施,它可以避免将打开的文件意外泄露给您使用exec*()传递控制权的程序。

只有在没有O_CLOEXEC可用时才会这样做,这样就可以在打开文件时设置此标志。

答案 1 :(得分:1)

fcntl(fd, F_GETFD)是"获取文件描述符标记"操作和fcntl(fd, F_SETFD, flags)是"设置文件描述符标志"。

因此,整体意义是"将FD_CLOEXEC添加到标志集#34;。