我有一个程序可以在两个进程之间创建管道。一个进程持续监视另一个进程的输出,当遇到特定输出时,它通过具有write()
功能的另一个管道提供输入。我遇到的问题是,管道的内容不会经过另一个进程的stdin流,直到我close()
管道。我希望这个程序在遇到它正在寻找的输出时无限循环并做出反应。有没有办法在不关闭管道的情况下将输入发送到另一个进程?
我已经搜索了一下,发现命名管道在关闭后可以重新打开,但是我想知道是否还有其他选项,因为我已经编写了代码来使用未命名的管道而我还没有学会使用命名管道。
答案 0 :(得分:4)
看一下使用fflush。
答案 1 :(得分:2)
你是如何阅读另一端的?你期待完整的字符串吗?您没有在发布的代码段中发送终止NUL。也许发送strlen(string)+1个字节会修复它。没有看到代码就很难说。
答案 2 :(得分:1)
使用fsync。 http://pubs.opengroup.org/onlinepubs/007908799/xsh/fsync.html
来自http://www.delorie.com/gnu/docs/glibc/libc_239.html: 一旦写入返回,数据就会被排队写入并可以立即读回,但不一定要立即写入永久存储器。您可以在需要确保数据已永久存储之前使用fsync,然后再继续。 (系统批处理连续写入并在方便时一次性完成所有操作更有效。通常它们将在一分钟或更短时间内写入磁盘。)现代系统提供另一个函数fdatasync,它只保证文件的完整性数据,因此更快。您可以使用O_FSYNC打开模式使写入始终在返回之前将数据存储到磁盘。