将字符串作为标准输入传递给可执行文件

时间:2014-10-08 21:24:21

标签: c exec stdin pipe

我有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可执行文件的标准输入?

1 个答案:

答案 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$