在popen()
的glibc实现中,它指定了
popen()函数应确保在新的子进程中关闭在父进程中保持打开的先前popen()调用的任何流。
为什么呢?如果目的是避免fd泄漏,为什么不关闭所有打开的fds?
popen()
的glibc实现使用fork()
。虽然dup2()
和close()
之间存在fork()
和exec()
次呼叫,但是可以将fork()
替换为vfork()
以提高性能吗?
popen()
的Linux实施是基于fork()
而不是vfork()
?为什么(或为什么不)?
我要编写popen()
的双向版本,它返回两个FILE*
:一个用于读取,一个用于写入。我该如何正确实现?它应该是线程安全的,没有fd泄漏。如果它很快就会更好。