我在书籍serious-cryptography-practical-modern-encryption中找到了这段代码。
嵌套fcntl
做什么?
获取文件描述符并用FD_CLOEXEC
对其进行Ored,我不清楚我在这里发生了什么。
#ifndef O_CLOEXEC
fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
为清晰起见,省略了其他代码。
答案 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;。