我在书中找到了这个代码。
nestedfcntl在做什么?
获取文件描述符并用FD_CLOEXEC对其进行存储,我不清楚这里发生了什么。

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

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

最佳答案

获取文件描述符
不,它获取文件描述符的标志。请参见fcntl() manual page。然后外部调用设置这些标志,并另外设置FD_CLOEXEC。这样可以确保在调用exec()系列的函数时(即用新程序映像替换进程时)关闭文件。这是一种安全措施,它可以避免将打开的文件意外泄漏给通过exec*()将控制权传递给的程序。
只有在没有可用的O_CLOEXEC时才执行此操作,这允许在打开文件时设置此标志。

关于c - 这个嵌套的fcntl有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47461440/

10-11 12:30