2014-12-07 99 views
0

我写了这个简单的程序。我想将它的输出记录到test.log中,如下所示。我能做到这一点吗?如何记录execve调用的输出?

int main(int argc, char **argv) 
{ 
     int fd = open("test.log", O_CREAT|O_WRONLY); 
     char *path[2]; 
     path[0] = "/bin/ls"; 
     path[1] = NULL; 

     execve((char *)&path[0], &path, NULL); 

     close(fd); 
     return 0; 
} 
+0

您可以在您的命令中使用管道运算符,并将管道标准输入或标准输出传送到文件或其他管道,您可以使用子进程读取。您可以将输出管道输出到您在执行execve之前创建的管道,并使用子进程读取它。 – 2014-12-07 21:16:49

+3

您需要制作fd 1(也可能是fd 2,如果您还想捕获错误输出),请参阅您的文件。参见'dup2()'。 – celtschk 2014-12-07 21:20:39

+0

你能举个例子吗?我之前一直在研究它,但我无法很好地理解手册页。 – CaseyJones 2014-12-07 22:12:55

回答

0

工作解决方案,由Rici指导。

int main(int argc, char **argv) 
{ 
     int fd = open("test.log", O_CREAT|O_WRONLY, 0600); 
     char *path[2]; 
     path[0] = "./tes"; 
     path[1] = NULL; 

     dup2(fd, 1); 
     dup2(fd, 2); 
     close(fd); 

     execve(path[0], (char **)&path, NULL); 

     return EXIT_FAILURE; 
}