리눅스 파일 입출력 2

[ Linux Kernel ] 27. 다중 입출력 - poll()

27. 다중 입출력 - poll() poll() 시스템콜은 유닉스 운영체제의 최초 상용화 버전 중 하나인 'Unix System V'에서 제공하는 다중 입출력 방식이었습니다. 리눅스에서 제공하고 있던 select() 시스템콜보다 더 좋았던 까닭에 리눅스에서도 poll() 시스템콜을 도입하였습니다. select() 시스템콜의 단점을 보완한 poll() 시스템콜이지만, 기존에 select()로 다중 입출력을 구현했던 개발자의 습관과 타 시스템으로의 이식성을 이유로 덜 사용된다고 합니다. #include int poll(struct pollfd* fds, nfds_t nfds, int timeout); struct pollfd { int fd; // 파일 디스크립터 short events; //..

[ Linux Kernel ] 25. 파일 입출력 - open(), read(), write()

25. 파일 입출력 유닉스 시스템에서는 거의 모든 것을 파일로 표현하므로 '파일 입출력'은 매우 중요한 부분입니다. 알다시피 파일은 '읽기'나 '쓰기' 전에 반드시 '열기(open)'를 해야합니다. 그리고 커널은 '파일 테이블'이라고 하는 프로세스별로 열린 파일 목록을 관리합니다. 각 프로세스에는 기본적으로 0, 1, 2 값을 가지는 파일 디스크립터가 open되어 있습니다. 0 - 표준 입력(stdin) 1 - 표준 출력(stdout) 2 - 표준 에러(stderr) 위의 3가지 파일 디스크립터를 직접 참조하는대신 C 라이브러리는 #define 매크로 정의를 제공합니다. 따라서, 해당 파일 디스크립터를 사용하고싶다면 아래 정의된 매크로로 참조하는게 좋습니다. #define STDIN_FILENO 0 #d..