虽然笔者认可不重复发明轮子的理论,但是,在遇到具体问题的时间,如果你不知道一个具体的API,还是会陷入重复制造的麻烦当中。
笔者遇到的问题,是父进程从父子进程之间的pipe,按行工作协议读取子进程的行输出。
但是,因为不知道fdopen函数的存在,原来也曾蹩脚地写过解析行的小函数,而且正确性还没有办法一下子保证正确 😦
在用fdopen将pipe文件句柄转换为文件流对象后,您立马可以直接使用工业级的fgets stream API!
如果,是文件系统的文件流操作,还是建议直接使用f* stream APIs,不用fdopen进行转换 。。。
注意事项
fdopen后句柄所有权将发生转移,后期必须使用fclose进行关闭文件流对象fcntl设置pipe文件句柄的O_NONBLOCK选项,对于fgets存在影响,建议在非阻塞场景,必须设置-
waitpid(childpid, &status, WNOHANG | WEXITED) == 0检测子进程是否已退出
遗留问题
- 文件流操作在
f* API体系中是否可独立设置阻塞非阻塞状态?

1814

被折叠的 条评论
为什么被折叠?



