我有代码,我想将一段特定的代码封装到一个分叉的孩子中,这样如果代码导致问题,它不会影响父级,并且父级将能够报告。
通话exec
后我不知道。fork
简单明了fork
,然后运行通常在父级中运行的代码。
child 中的代码将内容输出到stdout
和stderr
。由于交错输出和stdio
缓冲的问题,我现在正在研究TLPI以获得更好的解决方案。
我想出的想法大致是:
pipe()
对于每个流fork()
- 在孩子:
close()
读取管道末端dup2()
写入结束于文件描述符stdout
和stderr
分别setbuf(fd, NULL)
关闭stdio
子级内部的流缓冲。
- 在父母中:
close()
写管道的末端- 使用
select
//等pselect
(epoll
必须跨 Linux、BSD、AIX、Solaris 等运行)来观察管道的读取端是否有新数据,以及当它write()
直接到达父进程中的相应文件描述符时。
dup2
现在,我认为孩子的内在和内在之间缺少了一步setbuf
。它是什么?
setbuf
FILE*
当然需要一段dup2
时间int
。
freopen
想到了,但它需要一条路径。如果我只想为流分配一个新的文件号,我该怎么做?