fgets按行解析pipe文件句柄输出

虽然笔者认可不重复发明轮子的理论,但是,在遇到具体问题的时间,如果你不知道一个具体的API,还是会陷入重复制造的麻烦当中。

笔者遇到的问题,是父进程从父子进程之间的pipe,按行工作协议读取子进程的行输出。

但是,因为不知道fdopen函数的存在,原来也曾蹩脚地写过解析行的小函数,而且正确性还没有办法一下子保证正确 😦

在用fdopenpipe文件句柄转换为文件流对象后,您立马可以直接使用工业级的fgets stream API

如果,是文件系统的文件流操作,还是建议直接使用f* stream APIs,不用fdopen进行转换 。。。

注意事项

  • fdopen后句柄所有权将发生转移,后期必须使用fclose进行关闭文件流对象
  • fcntl设置pipe文件句柄的O_NONBLOCK选项,对于fgets存在影响,建议在非阻塞场景,必须设置
    • waitpid(childpid, &status, WNOHANG | WEXITED) == 0检测子进程是否已退出

遗留问题

  • 文件流操作在f* API体系中是否可独立设置阻塞非阻塞状态?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值