C++ 在C/C++;我想多次写入同一管道

C++ 在C/C++;我想多次写入同一管道,c++,c,file-io,pipe,named-pipes,C++,C,File Io,Pipe,Named Pipes,我有一个在两个进程之间创建管道的程序。一个进程不断监视另一个进程的输出,当遇到特定的输出时,它通过另一个管道使用write()函数提供输入。不过,我遇到的问题是,在我close()管道之前,管道的内容不会进入另一个进程的stdin流。我希望这个程序在每次遇到它正在寻找的输出时都能无限循环并做出反应。有没有办法在不关闭管道的情况下将输入发送到其他进程 我搜索了一下,发现命名管道可以在关闭后重新打开,但我想知道是否还有其他选择,因为我已经编写了使用未命名管道的代码,但我还没有学会使用命名管道。看看如

我有一个在两个进程之间创建管道的程序。一个进程不断监视另一个进程的输出,当遇到特定的输出时,它通过另一个管道使用
write()
函数提供输入。不过,我遇到的问题是,在我
close()
管道之前,管道的内容不会进入另一个进程的stdin流。我希望这个程序在每次遇到它正在寻找的输出时都能无限循环并做出反应。有没有办法在不关闭管道的情况下将输入发送到其他进程

我搜索了一下,发现命名管道可以在关闭后重新打开,但我想知道是否还有其他选择,因为我已经编写了使用未命名管道的代码,但我还没有学会使用命名管道。

看看如何使用命名管道

使用fsync

发件人:
一旦写操作返回,数据将排队等待写入,并且可以立即读回,但不一定立即将其写入永久存储器。当您需要确保数据在继续之前已永久存储时,可以使用fsync。(对于系统来说,更有效的方法是批量进行连续写入,并在方便的时候一次性完成。通常情况下,它们总是在一分钟或更短的时间内写入磁盘。)现代系统提供了另一个功能fdatasync,它只保证文件数据的完整性,因此速度更快。您可以使用O_FSYNC open(O_FSYNC打开)模式使write始终在返回之前将数据存储到磁盘。

您如何读取另一端?您需要完整的字符串吗?您没有在发布的代码段中发送终止NUL。也许发送strlen(字符串)+1个字节可以解决这个问题。如果看不到代码,很难判断。

第一个进程如何写入管道?如果它使用
fprintf()
等,那么它的输出可能正在被缓冲。对
fflush()
的调用应该会将数据推送到管道中。它使用类似
write(管道[1],字符串,strlen(字符串))的行写入管道
fflush()
看起来很有希望,我会试试。我读了一点,你确定你能在管道上使用
fflush
?问题是,输入被推送到管道的缓冲区中,然后就放在那里,而不是发送到第二个进程的stdin。如果我使用
write(管道[1],str,strlen(str));关闭(管道[1])输入将被发送,但我似乎找不到任何其他方法使其发送
pipe[1]
是一个
整数
,而fflush将
文件*
作为参数,我不知道如何使用它。@Alex:如果我记得正确,整数是一个文件描述符,您可以使用fdopen打开它。如果您想在管道中使用fprintf之类的东西,这会非常方便。我尝试过,它使用fdopen进行编译,但它仍然无法将输入推送到子进程。@Alex:我不确定您的代码中是否还有其他内容。您误解了<如果您是通过
write
进行写作,code>fflush()
将无关紧要。只有
fwrite
s被
fflush
刷新。管道的另一端进入一个我没有源代码的程序的
stdin
流。基本上我是在创建管道,派生一个新的进程,在子进程中我使用
dup2
将管道连接到
stdin
stdout
。我会尝试你的建议并报告我的发现,谢谢你的建议。非常感谢,你的建议让我找到了问题的答案。输入将进入某种命令行,所以我的问题是,我没有在末尾使用换行符来模拟按enter键提交命令。引用的代码段是什么?