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
728x90
'알고리즘 기초시절' 카테고리의 다른 글
백준 2979번 트럭주차 (C++) (0) | 2022.12.29 |
---|---|
백준10808번 알파벳 개수(C++) (0) | 2022.12.29 |
백준 2309번 일곱 난쟁이(C++) (0) | 2022.12.29 |
파일디스크립터에 대하여(간단한 설명) (0) | 2022.12.19 |
컴파일에 대하여(간략설명) (0) | 2022.12.19 |