2014-12-07 104 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; 
}