gpt4 book ai didi

c++ - 使用 std::ofstream 时如何设置 O_CLOEXEC

转载 作者:太空狗 更新时间:2023-10-29 21:50:18 28 4
gpt4 key购买 nike

C++ (std::ofstream) 等价于什么:

int fd = open(fn,O_WRONLY|O_NDELAY|O_APPEND|O_CREAT|O_CLOEXEC,0600);

我想使用它的应用程序只能在较新版本的 linux 上运行,因此可移植性不是问题。

最佳答案

(可能)没有可移植的方法来做到这一点。至少有两个选择。

第一个选项,获取fd/附加fd

  • 获取ofstream的文件描述符
  • 附加一个文件描述符到ofstream

有很多“附加文件描述符”、“从 fstream 获取文件描述符”等示例。如果您能找到一个有效的示例,那么一切就绪。

如果你能做第一个,你可以在文件上做一个fcntl

/* not checking return values since I am lazy; *you* should check them */
flags = fcntl(fd, F_GETFD);
flags |= FD_CLOEXEC;
fcntl(fd, F_SETFD, flags)

如果你可以做第二个,你可以简单地通过open获取你的描述符并附加它。

第二个选项,获取所有打开的 fds 并在它们上设置 FD_CLOEXEC

这不太干净(但更有可能工作)。打开所有您不想让您的 child 继承的 fstreams。转到 /proc/self/fd。为每个 fd 设置 FC_CLOEXEcflags。

关于c++ - 使用 std::ofstream 时如何设置 O_CLOEXEC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422691/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com