read 함수
원형
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
인자
- fd : 읽을 파일의 파일 디스크립터
- buf : 읽어 드릴 데이터를 저장할 버퍼
- count : 읽어 들일 데이터의 최대 길이(buf)의 길이보다 길어서는 안됨)
- 리턴값 :
- 실제로 읽은 데이터의 byte 수
- 일반적으로 count와 같은 값을 리턴 하지만 endof에 도달하거나, socket통신에서 수신할 데이터가 아직 도달하지 않았을때, socket이 close했을때
- 0 : 더 이상 읽을 파일이 없을 경우
- -1 : 오류가 발생했을 경우. 상세한 에러내용은 errno에 기록된다.
errno종류
EAGAIN : file을 open할 때에 O_NONBLOCK flag이 설정되었으며, 현재 읽을 데이터가 없어서 read()함수를 바로 return함. EAGAIN or EWOULDBLOCK : fd가 socket이고 socket에 O_NONBLOCK으로 설정된 경우 읽을 데이터를 수신하지 못하여 바로 return함. EBADF : fd가 유효하지 않은 file descriptor임. EFAULT : buf가 access할 수 없는 영역의 데이터 buffer임. 주로 변수를 pointer로 설정한 후에 malloc(3)하지 않은 경우 EINTR : signal이 발생하여 interrupt됨. EINVAL : fd, buf, count 등의 변수가 잘못 설정된 경우. (예, count가 -값이 설정된 경우 등) EIO : I/O 오류. background process에서 terminal에 대한 I/O를 시도했다든 지... EISDIR : open된 fd가 directory인 경우
특징
- read함수의 특징 : 파일을 읽으면 읽은 size 만큼 파일의 다음 읽을 위치가 이동된다.
- 파일의 끝에 도달하면 더이상 읽을 파일이 없기 때문에 0을 리턴한다.
Uploaded by N2T