Linux 의 표준 입력 과 표준 출력 의 이중 의 미 를 인식 하 다.

2993 단어 linux
관례 에 따 르 면 UNIX 시스템 셸 은 파일 설명자 0 을 사용 하여 프로 세 스 의 표준 입력 (일반적으로 키보드) 과 연결 되 고, 파일 설명자 1 은 표준 출력 (일반적으로 모니터) 과 연결 되 며, 파일 설명자 2 는 표준 오류 출력 (일반적으로 모니터) 과 연 결 됩 니 다.
POSIX 에 따 른 응용 프로그램 에서 환수 0, 1, 2 는 기호 상수 stdIN 로 바 꿔 야 합 니 다.FILENO、stdOUT_FILENO 와 stdERRFILENO.이 상수 들 은 헤더 파일 < unistd. h > 에 정의 되 어 있 습 니 다.
일반적으로 교재 에 서 는 명확 하 게 구분 되 지 않 지만, 우 리 는 표준 입력 에 두 가지 의미 가 있다 는 것 을 알 아야 한다. 하 나 는 stdIN 을 가리킨다.FILENO (관례 적 으로 지정 한 표준 입력 장치 설명자);또 다른 의 미 는 표준 입력 장치 (예 를 들 어 키보드) 를 말한다.마찬가지 로 표준 출력 도 두 가지 의미 가 있다. 하 나 는 stdOUT 를 말한다.FILENO (관례 적 으로 지정 한 표준 출력 장치 설명자);다른 의 미 는 표준 출력 장치 (예 를 들 어 모니터) 를 말한다.
scanf 함 수 는 표준 입력 에서 내용 을 읽 습 니 다. 우 리 는 보통 키보드 에서 읽 었 다 고 생각 합 니 다.printf 함 수 는 내용 을 표준 출력 에 출력 합 니 다. 우 리 는 보통 모니터 에 출력 한다 고 생각 합 니 다.문 제 는 없 지만 전 제 는 '통상 적 인 상황 에서' 다.
정확히 말 하면 scanf 함 수 는 파일 설명자 stdINFILENO (0) 와 연 결 된 파일 에서 읽 고 print 함 수 는 파일 설명자 stdOUT 로 출력 합 니 다.FILENO (1) 와 연 결 된 파일 중.
하면, 만약, 만약...FILENO 와 연 결 된 파일 이 키보드 가 아니라면 scanf 는 키보드 에서 내용 을 읽 지 않 습 니 다. 마찬가지 로 stdOUTFILENO 와 연 결 된 파일 은 디 스 플레이 가 아니 므 로 printf 도 디 스 플레이 에 내용 을 출력 하지 않 습 니 다.
예 를 들 어 설명 한다.
...

int fd[2];

int pid;



pipe(fd);



if((pid = fork()) < 0)

{

    perror("fork");

    exit(1);

}

else if(pid == 0)     /* 子进程 */

{

    close(fd[0]);

    dup2(fd[1], STDOUT_FILENO);

    ...    

}

else                 /* 父进程 */

{

    close(fd[1]);    

    dup2(fd[0], STDIN_FILENO);

    ...

}

하위 프로 세 스에 서 dup 2 (fd [1], stdOUT FILENO);문장 뒤에 printf 함 수 를 호출 하면 내용 이 모니터 에 출력 되 지 않 고 파이프 에 기 록 됩 니 다.
부모 프로 세 스에 서 dup 2 (fd [0], stdIN FILENO) 가 있 으 면;문장 뒤에 scanf 함 수 를 호출 하면 키보드 에서 내용 을 읽 지 않 고 파이프 에서 읽 습 니 다.
표준 입력 과 표준 출력 이 특정 문맥 에서 의 정확 한 의 미 를 잘 알 고 불필요 한 어려움 을 피 할 수 있다.

좋은 웹페이지 즐겨찾기