소켓 프로그래밍에서 송수신된 데이터는 소켓에 저장된다고 하였다. 이를 read, write 함수를 통해 수행했었는데, 리눅스 기반의 파일에 write, read 하는 방식과 똑같다.
리눅스의 파일 처리를 먼저 알아보자.
파일 디스크립터란 파일을 관리하는 키이다. 0,1,2는 표준 입출력과 표준 에러에 이미 부여됐으며 파일 또는 소켓을 관리할 때 3번부터 번호가 부여된다.
int open(const char *path, int flag)
성공 시 파일 디스크립터, 실패 시 -1 반환
path: 파일 이름
flag: 오픈 모드(쓰기, 읽기 등)
int close(int fd);
성공 시 0, 실패 시 -1 반환
fd: 닫고자 하는 파일의 디스크립터
ssize_t(int fd, const void *buf, size_t nbytes)
성공 시 전달한 바이트 수, 실패 시 -1 반환
fd: 파일 디스크립터
buf: 전송할 데이터가 담긴 버퍼의 주소
nbytes: 전송할 데이터의 크기
ssize_t read(int fd, void *buf, size_t nbytes)
성공 시 읽어온 바이트 수(파일의 끝이면 0), 실패 시 -1 반환
fd: 파일 디스크립터
buf: 데이터를 읽어올 버퍼
nbytes: 전송할 데이터의 크기