How to save execvp output

2019-08-09 17:08发布

I have problem with saving the execvp output.I want to save the output of (ps -eo pid,fname,state,ppid,gid,sid) in txt file .

This is my code :

#include <unistd.h>

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

    return 0;
}

But when i run it .It doesnt work .

标签: c execvp
2条回答
对你真心纯属浪费
2楼-- · 2019-08-09 17:18

">" (stream redirection) is supported by shell, so here you actually need run shell with arguments of ps stuff.

Popen is just a way that redirect stream in a more controlled way.

查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-08-09 17:40

Since you're wiping out your process by directly calling execvp, you could simply redirect the output to your file:

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;
}
查看更多
登录 后发表回答