Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>
<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=read">read</a>(2)

1장. read(2)

차례
1.1절. 사용법
1.2절. 설명
1.3절. 반환값
1.4절. 에러
1.5절. 예제

열린 파일기술자로 부터 데이타를 읽어들인다.


1.1절. 사용법

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);
		


1.2절. 설명

socket(2) 혹은 open(2) 등으로 열린 파일에서 원하는 데이타를 읽어들인다. fd 가 socket, open 으로 열린 파일기술자이다. fd 에 읽을 데이타가 있다면 buf 에 담아서 가져온다. count 는 buf 에서 한번에 가져올 데이타의 크기를 나타낸다.


1.3절. 반환값

성공할경우 0이상의 값을 반환한다. 0이라면 파일의 끝을 의미하며, 0 보다 큰 양수라면 이는 읽어들인 buf 의 크기를 나타낸다. 파일 끝이 아닌상태에서 파일에서 데이타를 가져오는데 성공했다면, 파일 포인터의 위치는 읽은 데이타의 크기만큼 이동하게 된다.

에러가 발생할경우 -1 을 되돌려주며 errno 는 적당한 값으로 설정된다. 에러가 발생했을경우 파일:::포인터(:12)의 위치가 어떻게 바뀔지는 예측할수 없다.


1.4절. 에러

다양한 원인에 의해서 에러가 발생할수 있으며 아래와 같은 에러 메시지들이 있다.

EINTR

데이타를 읽기전에 함수가 신호(signal)에 의해 인터럽트 되었다.

EAGAIN

비봉쇄로 열린 파일지시자에 즉시 읽을 데이타가 없을 경우.

EIO

I/O 에러.

EISDIR

파일지시자 fd 가 디렉토리를 가르킬경우.

EBADF

파일지시자 fd 가 유효한 파일기술자가 아니거나 읽기 위해 열려있지 않을경우

EINVAL

fd 가 읽기에 적당하지 않은 객체와 연결되어 있다.


1.5절. 예제

#include <unistd.h>

#include <stdio.h>
#include <string.h>

#define STDIN 1

int main()
{
    char buf[80];

    memset(buf, 0x00, 80);
    if (read(STDIN, buf, 80) < 0) 
    {
        perror("read erro : ");    
        exit(0);
    }

    printf("%s", buf);
}
		
표준입력(:12) "1"(키보드) 로 부터 읽어들인 문자열을 화면에 출력한다.