我使用
创建一个名为posix的管道,比如pipe_outmkfifo $path_tmp/pipe_out
在C
中打开它out_pipe = fopen(TMP_PATH "/pipe_out", "w");
并使用fprintf命令
写入fprintf(out_pipe,"%s",string);
我想我可以使用fprintf的返回值来检查写入了多少并将其与字符串的实际长度进行比较,以了解是否将完整的字符串写入管道。然后,如果它(过度)已满,我会以某种方式暂停,并尝试以无限循环再次写入,从尚未编写的内容开始......
详细内容会是什么样的,并且可能有更高级的方法在管道装满时自动停止(暂停)fprintf。
答案 0 :(得分:0)
如果您想主动检测管道何时已满,使用fprintf()
不是一个好主意,因为它会在内部缓冲您的数据。
即使管道fd不再可写,fprintf()将继续返回,除非内部缓冲区也已满。在这种情况下,它不会返回缩短的值,而是阻塞,直到它可以写入/缓冲整个字符串。
如果要检测管道状态,则不应使用缓冲功能,但是: