Linux 의 표준 입력 과 표준 출력 의 이중 의 미 를 인식 하 다.
2993 단어 linux
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 함 수 를 호출 하면 키보드 에서 내용 을 읽 지 않 고 파이프 에서 읽 습 니 다.
표준 입력 과 표준 출력 이 특정 문맥 에서 의 정확 한 의 미 를 잘 알 고 불필요 한 어려움 을 피 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.