728x90

리눅스 공부하면서... 이해한걸 또 까먹을까봐 내식대로 적어두려함

 

출처는 학교 리눅스 수업 + 모두를 위한 리눅스 프로그래밍(아오키 미네로, 2018) 이다.

 

컴퓨터는 기본적으로 1차원 바이너리를 읽는다.

따라서 모든 데이터는 1차원으로 바뀌어서 흐른다... 이것을 스트림이라고 할 수 있다.

 

프로세스가 하나 생성되면 해당 프로세스에 3개의 스트림이 자동으로 생성되는데,

이것이 표준입력, 표준출력, 표준에러출력이다.

이들은 각각 0,1,2 의 디스크립터(ID같은것?)를 갖는다. 그치만 그걸 유저에게 외우라고 하진않고....!

STDIN_FILENO, STDOUT_FILENO , STDERR_FILENO 라고 매크로를 지정하여뒀으니 이걸 넣어서 인자로 주고받을수있다

 

이것은 컴퓨터의 중요한 개념인 추상화(abstraction)를 내포하고있는데

내 프로세스는 이 표준입력이 파일에서 온건지 키보드로 친건지는 신경쓰지 않고 똑같이 처리할 수 있다.

표준 출력을 내보낼 때도 마찬가지다. 이걸 모니터에 쓰든 다른 프로세스로 전달하든 알바가 아닌것이당......

 

암튼 이 스트림들을 우리는 수많은 입출력이 포함 된 API 를 통해 간접적으로 쓰고있지만

시스템콜로 직접 호출하려면

unistd.h 헤더를 포함하고, read, write를 사용하면 된다.

write 를 쓰려면

문자열(char []) buf 를 선언하고(당연 변수명은 달라도 됨)

write(STDOUT_FILENO, buf, sizedof(Buf)-1);

 

위와같이 하면 된다.

 

buf는 우리가 흔히 '버퍼링 걸린다' 고 할때의 버퍼인데 (이말도 안쓴지 10년넘긴한듯...) 암튼....

저렇게 하면 buf 에 들어있는 문자열이 표준출력으로 나온다! ( 터미널에 찍힘 ) 파이프로 연결해서 다른데로 보낼수도있다..

 

 

해당내용은 위에 언급한 책 64~71 페이지를 읽어보면 더 자세하고 정확하게 나온당......끗!

728x90

+ Recent posts