如何解决清除 C 中的管道
我正在将数据从一个进程发送到另一个 pipe
,我想在阅读后清除 pipe
。
C
中是否有可以执行此操作的函数?
解决方法
是的。这只是 read
库提供的 stdio
函数。您必须根据需要多次调用它,以确保管道为空。
如文档所示,read
函数尝试从 I/O 通道(在您的情况下为管道)读取 count
字节,您已将文件描述符作为第一个参数传递给该通道,并将将其内容放入一个有足够空间容纳它的缓冲区中。
让我们回想一下,read
函数可能会返回一个值,该值指示读取的字节数小于请求的字节数。如果要读取的字节数比您预期的少,这完全没问题。
还请记住,如果没有可读取的内容并且编写器尚未关闭相对描述符,则从管道中读取会阻塞,这意味着在对应的描述符关闭其描述符之前您将不会获得 EOF。因此,您在尝试从管道读取时会卡住。如果您打算避免上述可能性,我建议您按照以下基于 poll
函数的解决方案来验证是否有要从文件描述符中读取的数据:
#include <poll.h>
struct pollfd pfd;
int main(void)
{
/* your operations */
pfd.fd = pipe_fd;
pfd.events = POLLIN;
while (poll(&pfd,1,0) == 1)
{
/* there's available data,read it */
}
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。