如何保存execvp输出

时间:2015-10-26 11:47:52

标签: c execvp

我在保存execvp输出时遇到问题。我想在txt文件中保存(ps -eo pid,fname,state,ppid,gid,sid)的输出。

这是我的代码:

#include <unistd.h>

int main(void)
{   
    char* args[]={"ps","-eo","pid,fname,state,ppid,gid,sid" , ">" , "t.txt"};
    execvp(args[0],args);

    return 0;
}

但是当我运行它时。它不起作用。

2 个答案:

答案 0 :(得分:2)

由于您通过直接拨打execvp来消除您的流程,您只需将输出重定向到您的文件:

int main()
{
    char * args[] = {"ps","-eo","pid,fname,state,ppid,gid,sid", 0};
    int fd = open("t.txt", O_CREAT | O_TRUNC | O_RDWR, 0644);
    if (fd < 0) {
        perror("open()");
        exit(EXIT_FAILURE);
    }
    close(STDOUT_FILENO);

    dup2(fd, STDOUT_FILENO);

    execvp(args[0], args);

    return 0;
}

答案 1 :(得分:0)

“&gt;” 中(流重定向)由shell支持,所以在这里你实际上需要运行带有ps stuff参数的shell。

Popen只是一种以更加可控的方式重定向流的方式。