我有 count = read(pipe, buffer, buffsize);
并尝试通过另一个可执行文件运行接收到的(缓冲区)内容,以对其执行不同的处理。
printf("%s", buffer);
打印正确,但通过 execl("/path", "/path", buffer, NULL);
或我尝试过的其他一些方法似乎无法运行可执行文件。 path
是编译后的可执行文件。
如果我使用 execv("./path", STDIN_FILENO);
,可执行文件确实正常运行,但它不是从管道中获取的。 path
期望字符串作为标准输入。
程序的情况是,我在一个程序中使用 while 循环和 read()
输入输入,使用管道将该文本发送到正在运行的程序 execl
(在此程序中无需执行任何其他操作),然后尝试使用字符串作为 stdin
调用可执行文件。当用户按下回车键时,只有预期的输入会以 block 的形式通过管道进入。
一个字符串通过管道的例子是this is an example
。可执行文件需要将此作为标准输入输入。
如何才能正确获取用作/path
可执行文件标准输入的字符串?
最佳答案
这听起来像 popen()
是你要找的东西,打开一个管道到你想要的可执行文件,这样你就可以将东西传递到它的标准输入,或者从它的标准输出读取东西.
例如:
#define _POSIX_C_SOURCE 200809L
#include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE * p = popen("/bin/cat", "w");
if ( !p ) {
perror("error opening pipe");
return EXIT_FAILURE;
}
fputs("Echo me via /bin/cat\n", p);
if ( pclose(p) == -1 ) {
perror("error closing pipe");
return EXIT_FAILURE;
}
return 0;
}
哪些输出:
paul@thoth:~/src/sandbox$ ./testpopen
Echo me via /bin/cat
paul@thoth:~/src/sandbox$
关于c - 将字符串作为标准输入传递给可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266730/