요약
⏱ 00:001. 방송 시작과 환경 설정
⏱ 00:00진행자는 오늘의 목표를 유닉스 환경에서 C로 시스템 프로그래밍 실력을 깊게 키우는 것이라고 밝힌다. 사용하던 터미널 앱을 바꾸는 과정에서 창과 세션을 정리하고, Ghostty와의 차이에 대해서도 잠깐 이야기한다.

작업 환경을 맞추는 시간이 꽤 길었는데, 이 과정 자체가 시스템 도구를 이해하고 싶다는 문제의식과 이어져 있다고 설명한다.
⏱ 01:432. read 함수로 파일 복사 코드 짜기
⏱ 01:43교재 3장 예제를 따라 표준 입력에서 read로 버퍼 단위로 읽고, 읽은 만큼 표준 출력에 write하는 반복문을 작성한다. read의 반환값이 0보다 큰 동안 반복하고, 쓴 바이트 수가 읽은 수와 다르거나 음수가 나오면 오류로 처리하는 흐름을 한 줄씩 짚어 간다.

진행자는 코드에 집중하기 어렵다고 말하면서도, 입출력이 몇 개의 단순한 호출로 이루어진다는 점을 확인한다.
⏱ 09:493. 셸 리다이렉션과 파일 디스크립터 정리
⏱ 09:49교재는 이 프로그램이 파일을 직접 열고 닫지 않고, 셸이 미리 연결해 둔 표준 입출력을 그대로 사용한다고 설명한다. 덕분에 사용자는 셸의 입출력 재지정 기능으로 원하는 파일을 연결할 수 있고, 프로그램이 끝나면 커널이 열린 파일 디스크립터를 모두 정리한다.

이 방식은 텍스트 파일과 바이너리 파일을 구분하지 않으므로 어떤 파일에도 같은 코드를 쓸 수 있다는 점도 강조된다.
⏱ 10:324. 시청자 질문: 개발자 진로와 AI
⏱ 10:32채팅에서 AI가 모든 일을 하게 되면 시스템 프로그래밍을 배울 의미가 있느냐는 질문이 나온다. 진행자는 웹 백엔드 개발을 본업으로 하면서, 자신이 쓰는 운영체제와 컴파일러, 라이브러리가 어떻게 동작하는지 알고 싶어서 이 공부를 시작했다고 답한다.

⏱ 15:405. 버퍼 크기 실험 결과
⏱ 15:40교재 그림 3.6은 큰 파일을 스무 가지 서로 다른 버퍼 크기로 읽은 결과를 보여준다. 버퍼가 1바이트일 때는 매우 오래 걸리고, 크기가 커질수록 시간이 급격히 줄다가 어느 지점부터는 차이가 작아진다.

최소 시간은 파일 시스템 블록 크기인 4096바이트 근처에서 나타나며, 그보다 더 키워도 이득이 거의 없다. 리눅스 ext4 환경에서 측정했다는 설명과 함께, 파일 시스템의 read-ahead가 작은 버퍼의 손해를 줄여 준다는 점도 소개된다.
⏱ 17:396. 교재 선택 이유와 목차
⏱ 17:39진행자는 여러 유닉스 교재를 비교한 끝에 이 책을 고른 이유를 설명한다. 리눅스 중심 교재와 비교했을 때 맥OS 사용자로서 특정 플랫폼에 치우치지 않는 책이 더 맞다고 느꼈다고 말한다.

목차에 시그널, 시스템 호출, 파일 입출력처럼 평소 궁금했던 주제가 모두 들어 있었다는 점도 선택의 이유다. Ghostty 같은 프로젝트의 코드를 보며 이해하지 못했던 부분을 이 책으로 메우고 싶다고 정리한다.
⏱ 21:417. 파일 공유와 커널의 자료구조
⏱ 21:41교재는 여러 프로세스가 같은 파일을 어떻게 공유하는지 설명하기 위해, 커널이 입출력에 쓰는 세 가지 자료구조를 소개한다. 각 프로세스는 프로세스 테이블 항목을 가지며, 그 안에 열린 파일 디스크립터의 표가 있고, 이 표는 커널의 파일 테이블과 연결된다.

이 관계를 알아야 한 프로세스가 파일 상태를 바꿨을 때 다른 프로세스에 어떤 영향이 가는지 이해할 수 있다. 이후 dup 함수를 배우기 위한 기초가 된다는 점도 함께 짚는다.



