2010-08-18 4 views
2

누군가가 C++ 프로그램은 세 개의 파일이 STDIN, STDOUT 및 STDERR가 열립니다 실행할 때마다 저에게 혼란 날씨 그는 자신의 지원이 링크 ..stdin, stdout 및 stderr 파일입니까? 이러한 스트림 실제로 파일입니다

http://tldp.org/LDP/abs/html/io-redirection.html

을했다하지만 내가 ?

누구에게 문의 할 수 있습니까? 당신이 당신의 터미널에 man stdio를 입력하면이

#include <stdio.h> 

FILE *stdin; 
FILE *stdout; 
FILE *stderr; 

그래서 그들은 정말 파일처럼

+0

주신 링크에서 [1] 번 메모를 보았습니까? 실제로 귀하의 질문에 대한 답변입니다. – MSalters

답변

2

POSIX 시스템에서 스트림은 특수한 파일 설명자입니다. Windows에는 자체적으로 오류가 있지만 파일 설명자도 있습니다. Windows의 특수 파일의 예로 표준 스트림 stdout, stdin 및 stderr뿐만 아니라 OpenFile()로 열 수있는 COMn과 같은 직렬 포트가 있습니다. Linux에서는/proc 및/dev 아래에 특수 파일이 있습니다./proc/cpuinfo는 CPU에 대한 정보를 다시 읽습니다./dev/sdX는 실제 디스크에 대한 핸들입니다.

그래서 특별한 파일이 무엇입니까? 파일 핸들이지만 내용은 디스크에 저장되지 않습니다. 파일 핸들은 커널에 대한 인터페이스 일뿐입니다. POSIX 시스템에서는 open(), close(), read(), write() 및 ioctl()을 사용하여 파일 설명자를 통해 커널과 통신합니다./dev/mem에 전체 메모리 맵에 대한 파일 디스크립터가있다. 예를 들어 메모리 영역을 매핑하려면 mmap()을 열고 이것을 전달합니다.

불행히도 Microsoft Windows는이 수준에서 파일 설명자를 처리하지 않습니다. 필자는 Windows가 POSIX와 같은 환경 이었으면 좋겠다.

+0

Windows_Handles_는 이와 비슷하게 작동합니다. WriteFile (HANDLE 출력)을 사용하여 핸들에 쓸 수 있습니다. 이것은 GetStdHandle (STD_OUTPUT_HANDLE);에서 얻은 핸들이라도 작동합니다. – MSalters

2

는 시놉시스 보인다.

이러한 파일이 실제로 어딘가에 있는지 묻는 경우 /dev/stdin, /dev/stdout/dev/stderr을 확인하십시오.

+0

Windows 시스템에 이러한 폴더는 어디에 있습니까? – Shubham

+0

@Shubham Touché :-) 나는 10 년 동안 창문을 사용하지 않았기 때문에 나는 정말로 모른다. –

+0

Windows 터미널에서 "man stdio"를 입력하면''man ''이 내부 또는 외부 명령, 실행 가능 프로그램 또는 배치 파일로 인식되지 않습니다.'어떤 장치에서 사용하는지 알 수 없습니다. – SigTerm

2

이들은 FILE*입니다. IO 기능이있는 파일처럼 사용할 수 있습니다. 하지만 그들은 '실제'파일이 아닙니다. 표준 IO 스트림입니다. 당신은 (리눅스 예) 쉘이 같은 작업을 수행 할 때 :

cat something.txt | myprog 

은 ... 다음 MYPROG은 STDIN에서 읽어 something.txt의 내용 (고양이 프로그램의 출력)을 읽을 수 있습니다.

관련 문제