file I/O

    [파일입출력] 4. 동기식 입출력

    입출력을 동기화하는 것은 분명 중요합니다. 하지만, 그 문제를 너무 확대 해석하고 크게 신경 쓸 필요는 없습니다. 요즘의 운영체제들은 버퍼를 통한 지연된 쓰기 작업을 구현하고 있습니다. 그렇기에 앞에 write() 시스템 콜 이용 시 주의해야 될 사항들을 그렇게 신경쓰지 않으셔도 됩니다. 하지만, 개발을 하다보면 개발자가 직접 데이터가 디스크에 기록되는 시점을 제어하고 싶을 때가 있습니다. 이런 상황에 맞춘 몇몇의 시스템 콜을 확인해 보겠습니다. 1. fsync() 시스템 콜과 fdatasync() 시스템 콜 첫 번째는 fsync() 시스템 콜과 fdatasync() 시스템 콜입니다. 먼저, fsync() 시스템 콜에 대해 알아보겠습니다. #include int fsync (int fd) 입력인자 int..

    [파일입출력] 2. read()로 파일 읽기

    지난 번 파일을 열었다면, 이번엔 열려있는 파일을 읽어보겠습니다. 가장 대표적인 저수준 파일 입출력에서는 POSIX에 정의된 read() 시스템 콜을 사용하여 파일을 읽어 들이는데요, 파일 오픈 시 사용했던 파일 디스크립터 기억나시나요? fd가 참조하는 파일의 오프셋에서 len 바이트만큼 buf로 읽어 들이게 됩니다. 먼저, read() 시스템 콜의 원형과 인자를 확인해 봅시다. #include ssize_t read (int fd, void *buf, size_t len) 입력 인자 int fd open() 시스템 콜로 열린 파일을 가리키는 파일 지정 번호 void* buf 파일에서 읽은 데이터를 저장할 메모리 공간 len 읽을 데이터의 크기(Byte 단위) 반환값 ssize_t 파일 읽기 성공 : 0..

});