개발지식/이것저것

read 함수

뜨거운 개발자 2022. 12. 22. 10:50

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