繁体   English   中英

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

[英]Executing shell command and reading its output on a C program

我正在尝试创建一个以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上执行命令的正确方法?

PS。 我读过关于popen但有一个很好的理由我不能使用它,因此我必须自己实现这个功能。

谢谢

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

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

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

使用fdopen将现有文件描述符与FILE *对象相关联。 其他一切看起来都不错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM