글
■ 파일의 데이터를 입력받는 함수
(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
/* 오류 */
}
'P rogramming > Linux System' 카테고리의 다른 글
메모리 맵핑(mapping) - mmap() / munmap() (8) | 2012.04.24 |
---|---|
오류처리 - perror(), strerror() (0) | 2012.03.06 |
파일 쓰기 - write() (0) | 2012.03.06 |
파일 오픈 - open() / creat() (0) | 2012.03.06 |
좀비프로세스의 원인과 종료 (0) | 2012.03.02 |
RECENT COMMENT