我有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
可执行文件的标准输入?
答案 0 :(得分:2)
听起来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$