본문 바로가기

프로그램언어

Socket Read function

이름
       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

'프로그램언어' 카테고리의 다른 글

PacketRelay Server 모형도.  (0) 2010.07.21
AUTOTOOLS 사용하기  (0) 2008.07.22