除了读取直到没有剩余内容之外,还有其他方法可以到达管道的最后位置吗?

发布于 2024-12-17 17:22:56 字数 105 浏览 0 评论 0原文

目前的方式:

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

有没有更好的寻求方式?

Current way:

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

Is there a better one with seeking?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情定在深秋 2024-12-24 17:22:56

计算机上的管道就像“现实”世界中的管道一样......数据从一端流向另一端,一旦从管道中消失,就无法恢复。就像真实的管道一样,不知道水流何时会停止,因此在水流实际结束之前尝试找到水流的终点是没有意义的。

Pipes on computers are like pipes in the "real" world... Data flows from one end to the other, and once it's gone from the pipe there is no getting it back. And like a real pipe there is no knowing when the flow will stop, so there is no meaning to try and find the end of the flow before it actually ends.

赤濁 2024-12-24 17:22:56

不,你不能在管道中寻找。你必须通读它。

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

No, you can't seek in pipes. You'll have to read through it.

Your code should handle cases where read returns -1 though, and not just assume it's properly positioned when the loop ends.

情深缘浅 2024-12-24 17:22:56

您可以将 splice( 2 ) 插入 /dev/null 来使用所有数据,但很难说这是“更好”。

You can splice( 2 ) into /dev/null to consume all of the data, but it's a tough argument that this is "better".

森末i 2024-12-24 17:22:56

您还可以过早关闭管道的可读端。但如果编写器端代码不处理这种情况(例如在写入之前调用 pollselect),它将收到一个 SIGPIPE 信号。

You also could close the readable end of the pipe prematurely. But if the writer end code don't handle that case (by e.g. calling poll or select before writing), it will get a SIGPIPE signal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文