什么是c ++(std :: ofstream)等价于:
int fd = open(fn,O_WRONLY|O_NDELAY|O_APPEND|O_CREAT|O_CLOEXEC,0600);
我想使用它的应用程序只能在较新版本的linux上运行,因此可移植性不是问题。
答案 0 :(得分:2)
(可能)没有可移植的方法来做到这一点。至少有两种选择。
有很多“附加文件描述符”,“从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
获取你的描述符并附上它。
FD_CLOEXEC
这不太干净(但更有可能工作)。打开您不希望孩子继承的所有fstream。转到/proc/self/fd
。对于每个fd设置FC_CLOEXEC标志。