READ
Section: 리눅스 프로그래머 매뉴얼 (2)
Updated: 1997년 6월 12일
Index
Return to Main Contents
이름
read - 파일 기술자(file descriptor)를 통해서 읽어들인다.
사용법
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
설명
read()는
파일 기술자
fd에서
buf로
시작하는 버퍼에
count
바이트까지 읽기를 시도한다.
만일
count가
0이라면 read()는 0을 반환하며 다른 결과는 가지지 않는다.
만일
count가
SSIZE_MAX보다 크다면, 결과는 예측할 수 없다.
반환값
성공시, 읽은 바이트 수를 반환하며(0은 파일의 끝을 나타낸다.)
파일 포인터의 위치는 읽은 수만큼 이동된다.
만일 이 수가 요구된 바이트의 수보다 작더라도 에러는 아니다;
이것은 실제로 즉시 이용할 수 있는 바이트가 거의 없기 때문이거나
(아마도 이것은 파일의 끝이어서 닫았거나 파이프나 단말기에서 읽기
때문이다.) read()가 어떤 신호에 의해 인터럽트가 되었기 때문이다.
에러시, -1을 리턴하며
errno는
적당한 값으로 설정된다.
이 경우 파일 포인터의 위치가 바뀔지 어떨지는 예측할수 없다.
에러
- EINTR
-
어떤 데이터를 읽기도 전에 함수가 신호에 의해 인터럽트되었다.
- EAGAIN
-
넌-블록킹 I/O가
O_NONBLOCK을
사용하여 선택되어졌고 즉시 읽을 수 있는 데이터가 없다.
- EIO
-
I/O 에러. 이것은 백그라운드 프로세스 그룹에 있는 프로세스가
제어되는 tty 단말기에서 읽기를 시도할때, 그리고 이것이 무시되거나
봉쇄되는 SIGTTIN이거나 또는 프로세스 그룹이 고아일때 일어난다.
또한 디스크나 테이프에서 읽는동안 저레벨(low-level) I/O 에러가
있을 때 일어난다.
- EISDIR
-
fd가
디렉토리를 가리킨다.
- EBADF
-
fd가
유효한 파일 기술자가 아니거나 읽기 위해 열려지지 않았다.
- EINVAL
-
fd가
읽기에 적당하지 않은 객체와 연결되었다.
- EFAULT
-
buf는
접근할 수 없는 주소공간을 가리키고 있다.
fd에
접속된 객체에 의존하여 다른 에러가 일어날 수 있다.
POSIX는 데이터 일부를 읽은 후 인터럽트 되었을 경우
read가
-1이나(
errno는
EINTR로 설정된다.) 이미 읽은 바이트의 수를 리턴하도록 허용한다.
호환
SVr4, SVID, AT&T, POSIX, X/OPEN, BSD 4.3
RESTRICTIONS
NFS 파일 시스템에서, 읽은 적은 양의 데이터는 단지 처음 타임 스탬프에서만
갱신되며 연속적인 콜은 그렇게 하지 않는다.
이것은 캐싱(caching)하는 클라이언트 쪽 특성 때문인데, 모든 NFS
클라이언트가 서버에 접근 시간(atime) 갱신을 하지는 않으며
클라이언트 쪽 캐쉬에서 읽기를 한 클라이언트는 서버 쪽 읽기가 없기
때문에 서버에 접근시간 갱신을 하지 않기 때문이다.
UNIX 구문은 클라이언트 쪽 캐싱 특성을 불가능하게 하여 얻어지며
이것은 대부분의 상황에서 서버 부하를 증가시키고 성능을 감소시킨다.
관련 항목
close(2),
fcntl(2),
ioctl(2),
lseek(2),
readdir(2),
readlink(2),
select(2),
write(2),
fread(3)
역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 5월 28일
Index
- 이름
-
- 사용법
-
- 설명
-
- 반환값
-
- 에러
-
- 호환
-
- RESTRICTIONS
-
- 관련 항목
-
- 역자
-
This document was created by
man2html,
using the manual pages.
Time: 08:07:00 GMT, March 25, 2004