실행

2012-02-24 5 views
0

나는 그의 실행이 내가 추가 된 세 줄을 이해할 수 없다 $ date> out.txt실행

#include <stdio.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <stdlib.h> 
#define NEWFILE (O_WRONLY | O_CREAT) 
#define MODE644 (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) 

int main() { 
    int fd; 
    if (fork() == 0) { 
     //// Code Here for add/// Result 

     fd=open("out.txt",NEWFILE,MODE644); 
     dup2(fd,1); 
     close(fd); 

     execlp("date",NULL); 
     exit(0); 
    } 
    wait(NULL); 
} 

에 해당하는 결과를 얻을 수 있도록 코드를 보완하기 위해 나에게 묻는 운동을 :

fd=open("out.txt",NEWFILE,MODE644); 
dup2(fd,1); 
close(fd); 

답변

0

까다로운 비트는 dup2입니다.

int dup2(int fildes, int fildes2); 

filedes2 닫히고 그것을 filedes의 클론을 만든다. 즉, 지금부터 filedes2을 참조하면 filedes을 참조한 것입니다. 코드로 돌아 가면 STDOUT_FILENO1이라는 것을 알아야합니다.

  • 파일을 열고 (기술자 filedes)
  • 닫기 STDOUT_FILENO하고 filedes
0

open를 참조 할 파일을 열고 파일 기술자를 반환

그래서 코드를 의미한다. dup2(fildes, fildes2)은 "파일 설명자 fildes2가 파일 설명자 fildes"와 동일한 열린 파일 설명을 참조하게합니다. 즉, 열려있는 경우 표준 출력을 닫고 stdout에 새 파일 설명자를 복사합니다. close 그러면 stdout이 방금 연 파일이므로 이제 더 이상 필요하지 않으므로 fd을 닫습니다.