我有代码,我想将一段特定的代码封装到一个分叉的孩子中,这样如果代码导致问题,它不会影响父级,并且父级将能够报告。
通话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。它是什么?
setbufFILE*当然需要一段dup2时间int。
freopen想到了,但它需要一条路径。如果我只想为流分配一个新的文件号,我该怎么做?