■ 파일의 데이터를 입력받는 함수


(1) read() - 파일 읽기

○ 함수원형
  ssize_t read (int fd, void *buf, size_t nbytes);

○ 리턴 값
성공 시 : 수신한 바이트 수, 실패 시 : -1

- fd : 데이터를 전송해 주는 대상을 가리키는 파일 디스크립터.
- buf : 수신 한 데이터를 저장할 버퍼를 가리키는 포인터.
- nbytes : 수신할 최대 바이트 수.


(2) read기능 구현 소스 예제

○ Source

○ Compile & Result


- data.txt 파일에 저장되어있는 "Hello~!!"를 읽어와 출력한다.


(3) 비차단 읽기
: 읽을 자료가 없을 때 read() 호출이 차단되지 않게 하기위해, 호출이 즉시 반환되는 편을 선호한다. 이를 비차단 읽기 라고 한다.

- open()을 호출하면서 O_NONBLOCK을 넘겨 파일 기술자를 비차단 모드로 열었지만 읽을 자료가 없다면,
   read()호출은 차단되는 대신 -1을 반환하며, errno를 EAGAIN로 설정한다. 비차단 읽기를 수행할 때는 EAGAIN을
   반드시 점검해야 한다.

ex)
char buf[BUFSIZ];
ssize_t nr;

start:
nr = read (fd, buf, BUFSIZ);
if (nr == -1) {
   if (errno == EINTR)
       goto start; /* 쉿 조용히 */
   if (errno == EAGAIN)
       /* 나중에 다시 시도한다. */
   else
       /* 오류 */
}

by 민트앤라떼 2012. 3. 6. 18:33