检查管道状态

时间:2012-05-23 13:40:15

标签: c printf pipe

我使用

创建一个名为posix的管道,比如pipe_out
mkfifo $path_tmp/pipe_out

在C

中打开它
out_pipe = fopen(TMP_PATH "/pipe_out", "w");

并使用fprintf命令

写入
fprintf(out_pipe,"%s",string);

我想我可以使用fprintf的返回值来检查写入了多少并将其与字符串的实际长度进行比较,以了解是否将完整的字符串写入管道。然后,如果它(过度)已满,我会以某种方式暂停,并尝试以无限循环再次写入,从尚未编写的内容开始......

详细内容会是什么样的,并且可能有更高级的方法在管道装满时自动停止(暂停)fprintf。

1 个答案:

答案 0 :(得分:0)

如果您想主动检测管道何时已满,使用fprintf()不是一个好主意,因为它会在内部缓冲您的数据。

即使管道fd不再可写,fprintf()将继续返回,除非内部缓冲区也已满。在这种情况下,它不会返回缩短的值,而是阻塞,直到它可以写入/缓冲整个字符串。

如果要检测管道状态,则不应使用缓冲功能,但是:

  • open()打开fifo / pipe
  • select()测试文件描述符是否可写
  • write()写入字符串(必须处理返回值)