[리눅스 시스템 프로그래밍] 3.3 read, write

파일을 열고 난 후에 데이터를 쓰거나 읽어올 때는 read와 write 함수를 사용합니다.

#include <unistd.h>

ssize_t read(int fd, void *buff, size_t nbytes);

반환 값: 읽어온 바이트 수, 실패 시 -1, 파일의 끝에서 시도하면 0

ssize_t write(int fd, const void *buff, size_t nbytes);

반환 값: 기록한 바이트 수, 실패 시 -1

read 함수를 호출하였을 때 반환 값은 읽기 요청한 바이트 수보다 작은 값일 수 있습니다. 예를 들어 현재 읽어올 데이터가 100바이트 밖에 없는데 200바이트 읽기를 요청하면 100바이트를 읽고 100을 반환합니다. 따라서 요청한 바이트 수보다 작은 값을 반환하면 파일의 끝을 만난 것입니다.

하지만 write 함수를 호출하면 정확히 요청한 바이트 수만큼 쓰여지고 반환 값도 요청한 바이트 수여야 합니다. 만약 쓰기를 실패하면 -1을 반환합니다. 참고로 ssize_t는 int와 같은 형식이고 size_t는 unsigned int와 같은 형식입니다.

 

다음은 도서정보를 파일에 쓰고 난 후에 읽어와서 확인하는 테스트 코드입니다.

[그림 3.3] ex_read_write 실행 화면
[그림 3.3] ex_read_write 실행 화면