【发布时间】:2014-10-08 21:24:21
【问题描述】:
我有 count = read(pipe, buffer, buffsize); 并尝试运行通过另一个可执行文件接收到的内容(缓冲区)以对其进行不同的处理。
printf("%s", buffer); 可以正确打印出来,但是通过execl("/path", "/path", buffer, NULL); 或我尝试过的许多其他方式运行它似乎并没有运行可执行文件。 path 是编译后的可执行文件。
如果我使用execv("./path", STDIN_FILENO);,可执行文件确实可以正常运行,但这不是从管道中取出的。 path 期望字符串作为标准输入。
程序的情况是我正在使用while循环和read()在一个程序上输入输入,使用管道将该文本发送到正在运行execl的程序(没有其他需要在这个程序中完成),然后尝试使用字符串作为stdin 调用可执行文件。当用户按下回车键时,只有预期的输入通过管道以块的形式进入。
通过管道的字符串示例是this is an example。可执行文件需要将此作为标准输入输入。
如何正确获取用作/path 可执行文件的标准输入的字符串?
【问题讨论】:
-
这里纠结了几个不同的问题;我们需要更多信息。第二个可执行文件是否期望其在其标准输入上输入,或作为命令行参数?它根本不运行,还是只是没有按预期处理输入?你是在子进程还是原始进程中做
execl?该管道上是否还有其他内容,或者它完全是第二个可执行文件的预期输入?做这一切的程序是否还有其他需要做的事情? -
@Zack 谢谢,我不确定我需要包括什么。我添加了更多信息
-
当通过管道的字符串是“this is an example”时,
count的值是多少? -
@chux 值为
1 -
像这样运行两个程序:pgm1 | pgm2 然后让 pgm1 从标准输入读取并输出到标准输出。让 pgm2 从标准输入读取并输出到标准输出。然后连接是自动的,您所要做的就是在使用命令行启动两个程序后键入输入,如上所示。