使用popen在管道中写入仅在管道关闭时发送数据

时间:2010-07-27 23:33:18

标签: c++ unix pipe popen

我正在使用popen打开写管道并将命令发送到应用程序。问题是,当我关闭管道时,命令只会发送到应用程序。

FILE * fp = open(target_app, "w");
fwrite(command, 1, command.size(), fp);
getchar(); //wait for a key, because I don't want to terminate the application
pclose(fp); // at this point, the command is sent

可能出现什么问题?

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

我只是弄清楚我必须冲洗管道才能发送命令而无需关闭它。我的修复是:

FILE * fp = open(target_app, "w");
fwrite(command, 1, command.size(), fp);
fflush(fp);
getchar(); //wait for a key, because I don't want to terminate the application
pclose(fp); // at this point, the command is sent

答案 2 :(得分:0)

管道将不会发送数据,直到达到它的结尾。 你必须说明这是结束,否则它会继续等待。

这样做的一种方法就是这样做:关闭管道。 另一个是使用fflush(在我看来最好)。 你也可以写一个\ n我猜,我现在已经很久没写过C ++了。

答案 3 :(得分:0)

从联系手册:

Note that output popen() streams are fully buffered by default.

这意味着对于标准实现,在将数据自动刷新到底层文件描述符之前,必须写入512到8192个字节。

要么致电fflush(),要么更好,请致电setvbuf(fp, nullptr, _IONBF, 0);