我在保存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;
}
但是当我运行它时。它不起作用。
答案 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只是一种以更加可控的方式重定向流的方式。