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

标签 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 调用可执行文件。当用户按下回车键时,只有预期的输入会以 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/

相关文章:

c - fflush(stdin) 和 flushstdin() 之间的区别

c - 如何从标准输入读取输入,直到 EOF 逐行读取,每行包含 C 中的四个空格分隔的整数

java - 为什么我会得到 "Unhandled exception type IOException"?

c - 指针或指针到指针

C 简单程序/你能解释一下结果吗?

c - 以二进制 64 位表示形式打印 long

c - 如何将 exec 输出存储到文件中?

python - InteractiveInterpreter.runco​​de 和 exec 函数之间的区别?

php - 通过终端和通过 PHP 调用 python 脚本之间的区别?错误在哪里?

c - 并行操作执行时间因分配动态内存与静态内存而异