gpt4 book ai didi

c - 在 C 程序上执行 shell 命令并读取其输出

转载 作者:IT王子 更新时间:2023-10-29 01:19:15 32 4
gpt4 key购买 nike

我正在尝试创建一个将 shell 命令作为参数的函数,使用 fork 生成一个执行该命令的新进程。我还想重定向命令的标准输出,以便函数的调用者可以使用 FILE* 指针读取它。

static FILE* runCommand(char* command){
int pfd[2];

if(pipe(pfd)<0)
return NULL;

if(pid=fork()==0){ //child
close(pfd[0]);
dup2(pfd[1],1); //redirect output to pipe for writing

execlp(command,(char*)0);
}

close(pfd[1]);

//return a file pointer/descriptor here?

我不确定如何返回可用于读取命令输出的文件指针。这也是在 shell 上执行命令的正确方法吗?

附言。我阅读了有关 popen 的内容,但我有充分的理由不能使用它,因此我必须自己实现此功能。

谢谢

最佳答案

该代码中的一个错误是您分配给未在任何地方声明的变量 pid。并且 pid 在父级中将始终为 1,因为编写的代码等效于 pid=(fork()==0) 而不是 (pid=fork())==0

您还应该在 dup2 调用后关闭 pfd[1]。为了更好地衡量,请检查 dup2 和 execlp 中的错误。

您真正的问题的答案是使用 fdopen

关于c - 在 C 程序上执行 shell 命令并读取其输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5284246/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com