이해가 완전히 뒤 떨어질 까봐 걱정됩니다. :)
커널의 관점이 아니라 프로그램의 관점 에서 "표준 입력", "표준 출력"및 "표준 오류"를 생각하십시오 .
프로그램이 출력을 인쇄해야 할 경우 일반적으로 "표준 출력"으로 인쇄합니다. 프로그램은 일반적으로 표준 출력으로 만 출력하고 표준 출력으로 printf
만 출력합니다.
프로그램이 오류 정보를 인쇄해야하는 경우 (예외는 아니지만 훨씬 높은 수준으로 부과되는 프로그래밍 언어 구성) 일반적으로 "표준 오류"로 인쇄됩니다. 일반적 fprintf
으로을 사용하여 인쇄 할 때 사용할 파일 스트림을 허용합니다. 표준 출력, 표준 오류, 또는 연 상태 다른 파일 : 파일 스트림은 쓰기 위해 열려있는 파일 수 fopen
또는 fdopen
.
"표준 입력"은 파일이 입력을 읽 fread
거나 fgets
, 또는 , 또는를 사용하여 읽을 때 사용됩니다 getchar
.
이러한 파일은 다음 과 같이 셸에서 쉽게 리디렉션 할 수 있습니다 .
cat /etc/passwd > /tmp/out # redirect cat's standard out to /tmp/foo
cat /nonexistant 2> /tmp/err # redirect cat's standard error to /tmp/error
cat < /etc/passwd # redirect cat's standard input to /etc/passwd
또는 전체 엔칠 라다 :
cat < /etc/passwd > /tmp/out 2> /tmp/err
두 가지 중요한 경고가 있습니다. 첫째, "표준 입력", "표준 출력"및 "표준 오류"는 단지 규칙입니다. 그것들은 매우 강력한 규칙이지만, 다음 grep echo /etc/services | awk '{print $2;}' | sort
과 같은 프로그램을 실행할 수 있다는 것은 매우 합의입니다. 각 프로그램의 표준 출력을 파이프 라인에서 다음 프로그램의 표준 입력에 연결하십시오.
둘째, 내가 파일 스트림 (작업을위한 표준 ISO C의 기능을 준 FILE *
객체) - 커널 레벨에서, 모든 파일 기술자 (인 int
파일 테이블에 대한 참조) 및 훨씬 낮은 수준의 같은 작업 read
및 write
하지 않습니다, ISO C 기능을 적절히 버퍼링하십시오. 나는 그것을 간단하게 유지하고 더 쉬운 기능을 사용하려고 생각했지만 대안을 알아야한다고 생각했습니다. :)