2014-12-07 5 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

명령에서 pipe 연산자를 사용하고 stderr 또는 stdout을 파일 또는 다른 파이프로 파이프 할 수 있습니다.이 파일은 하위 프로세스를 사용하여 읽을 수 있습니다. execve를 실행하기 전에 생성 한 파이프에 출력을 파이프하고 자식 프로세스를 사용하여 읽을 수 있습니다. –

+3

파일을 참조하려면 fd 1 (그리고 오류 출력을 catch하려는 경우 fd 2)을 만들어야합니다. 'dup2()'를 참조하십시오. – celtschk

+0

예제를 제공해 주시겠습니까? 나는 그걸 전에 들여다보고 있었지만, 맨 페이지를 잘 이해할 수 없었다. – CaseyJones

답변

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; 
}