除了阅读之外,有没有办法到管道的最后位置,直到什么都没有留下?

时间:2011-11-24 12:06:00

标签: c linux posix pipe

目前的方式:

while(read(pipe, input, sizeof(input))>0);

有没有更好的寻求?

4 个答案:

答案 0 :(得分:2)

不,你不能在管道中寻找。你必须仔细阅读它。

你的代码应该处理read返回-1的情况,而不仅仅是假设它在循环结束时正确定位。

答案 1 :(得分:2)

计算机上的管道就像“真实”世界中的管道......数据从一端流向另一端,一旦它从管道中消失,就无法将其取回。就像真正的管道一样,不知道流量什么时候会停止,所以在实际结束之前没有任何意义可以尝试找到流程的终点。

答案 2 :(得分:1)

你可以将(2)拼接到/ dev / null以消耗所有数据,但这是一个很难说的“这是更好的”。

答案 3 :(得分:0)

您也可以过早关闭管道的可读端。但如果作者结束代码没有处理这种情况(例如在写作之前调用pollselect),它将获得SIGPIPE信号。