해결된 질문
작성
·
432
1
[표준 스트림과 파일 디스크립터] 강좌를 보는데,
프로세스의 표준 입출력은 모두 파일 디스크립터라고 말씀해주셨는데,
파일 디스크립터 설명 부분에서 파일 디스크립터는 "파일을 대변하는 객체" 라고 말씀해주셨습니다.
그렇다면 표준 입출력은 "어떤 파일"을 대변하는 건가요??
답변 1
4
안녕하세요. 식빵님.
우리가 일반적으로 '파일'이라고 하면 디스크에 저장되는 데이터 덩어리를 말합니다. 흔히 접할 수 있는 파일로는 사진 파일, 동영상 파일 등이 있죠. 이런 종류의 파일을 일반 파일이라고 합니다.
표준 스트림은 표준 입력, 표준 출력, 표준 에러에 대한 각각의 파일 디스크립터를 말합니다. 파일 디스크립터가 일반 파일을 대변하는 객체이기도 하지만, 파이프(pipe)나 네트워크 소켓(socket) 등을 대변하는 객체이기도 합니다. 즉, 표준 스트림에 해당하는 3개의 파일 디스크립터는 표준 입력, 표준 출력, 표준 에러를 대변하는 객체라고 말씀드릴 수 있습니다.
예를 들어 설명을 해볼게요. 스트림을 한 방향으로만 흐르는 물줄기라고 생각하세요. 모든 프로세스에는 3개의 물줄기가 있습니다. 들어오는 물줄기 하나(표준 입력), 나가는 물줄기 둘(표준 출력, 표준 에러)가 달려있습니다. 프로세스에서 이 물줄기로 들어오는 내용을 읽거나, 물줄기로 내보낼 내용을 쓸 수 있는데 이 때 각 물줄기를 대변하는 파일 디스크립터라는게 존재합니다. 프로세스가 생성되면 기본적으로 생성되는 것들이죠. 그래서 프로세스는 파일 디스크립터를 통해 물줄기로부터 내용을 읽거나, 물줄기로 내용을 쓸 수 있습니다.
이해가 되셨을까요? 더 궁금한 점 있으시면 댓글 남겨주세요!! :D
식빵님께 추가로 답변을 드리자면, 리눅스에서는 모든 것을 "파일"로 취급하기때문입니다. 그래서 윈도우와는 달리 파일, 소켓, 파이프 등 여러가지를 파일 디스크립터라는 정수로 핸들링 즉, 컨트롤 합니다. 그리고 여기서 말하는 표준 스트림이라고 하는 표준 입력, 표준 출력, 표준 에러들은 파일 디스크립터로 가장 먼저 할당되기때문에 항상 0, 1, 2라는 값을 가집니다. 이거에 대해서 조금 더 알고 싶으시다면, 구글에 파일디스크립터, 표준 스트림, 리다이렉션, 파이프 등을 검색해보시면 좋을 거 같습니다.
파일 디스크립터에 포괄적인 의미가 있었군요. 감사합니다!