리눅스 공부하면서... 이해한걸 또 까먹을까봐 내식대로 적어두려함
출처는 학교 리눅스 수업 + 모두를 위한 리눅스 프로그래밍(아오키 미네로, 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 페이지를 읽어보면 더 자세하고 정확하게 나온당......끗!
'프로그래밍 공부 > OS' 카테고리의 다른 글
[Linux] Error : undefined reference to `pthread_cancel' / pthread reference error / lpthread와 pthread 빌드 옵션 차이 (0) | 2021.11.13 |
---|---|
[Linux] signal systemcall 로 Synchronus 프로그래밍 하기 (0) | 2021.11.11 |
[Linux] scp 오류 : No such File or Directory 해결 (0) | 2021.09.26 |
[Linux] 01 시작하기 (3: Basic command) / 리눅스 기초 커멘드,명령어/ 리눅스 왕초보 (0) | 2021.09.22 |
[Linux] 01 시작하기 (2 : File System) (0) | 2021.09.19 |