目前的方式:
while(read(pipe, input, sizeof(input))>0);
有没有更好的寻求?
答案 0 :(得分:2)
不,你不能在管道中寻找。你必须仔细阅读它。
你的代码应该处理read返回-1的情况,而不仅仅是假设它在循环结束时正确定位。
答案 1 :(得分:2)
计算机上的管道就像“真实”世界中的管道......数据从一端流向另一端,一旦它从管道中消失,就无法将其取回。就像真正的管道一样,不知道流量什么时候会停止,所以在实际结束之前没有任何意义可以尝试找到流程的终点。
答案 2 :(得分:1)
你可以将(2)拼接到/ dev / null以消耗所有数据,但这是一个很难说的“这是更好的”。
答案 3 :(得分:0)
您也可以过早关闭管道的可读端。但如果作者结束代码没有处理这种情况(例如在写作之前调用poll
或select
),它将获得SIGPIPE
信号。