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 .
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;
}
">" (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.