Linux/Linux_programing

리눅스 FILE - read() 시스템콜

sosal 2009. 9. 27. 07:21
반응형

/*
 * made by so_sal
 * http://sosal.tistory.com/
 */



정수값

이름

0

표준 입력( stdin ) /dev/stdin

1

표준 출력( stdout ) /dev/stdout

2

표준 오류( stderr )


#include <unistd.h>
  size_t read( int fildes, void *buf, size_t nbytes );

첫번째 인자 :: fildes  :: 파일 서술자
두번째 인자 :: *buf    :: 읽어와서 저장할 버퍼.
새번째 인자 :: nbytes :: 읽을 수 있는 최대 byte의 수

read는 총 읽어와서 buf에 저장한 byte의 수를 리턴합니다.

#include <unistd.h>
#include <stdlib.h>
int main(){

  char buffer[128];
  int nread;
  nread = read( 0, buffer, 128 );
  if( nread == -1 )
   write( 2, "A read error has occurred\n", 26 );
  if( (write( 1, buffer, nread ) ) != nread ) //1번 (표준출력)으로 write == printf 와 동일한 역할
   write( 2, "A write error has occurred\n", 27 );
  exit(0);
}

128 바이트를 저장할 수 있는 캐릭터 배열 buffer를 선언.

read함수를 0번 서술자를 이용하여 nread에 사용 하였습니다.
read함수를 0번 서술자(표준입력)에 대해서 읽어옵니다.
(만일 파일을 가리키는 서술자였다면, 그 파일에 적혀있는 내용을 buffer에 읽어옵니다.)

표준 입력인 서술자에 대해서 read함수로 읽어오는 경우는
사용자가 입력하는 문자 열에 대해 받아드리게 됩니다.

따라서 이 예제는 사용자가 입력한 값을 buffer에 저장하게 되고, (실패시 에러 )
read는 읽어온 byte수를 nread변수에 리턴 합니다.
2번째 if절에서는 read로부터 읽어와 저장되어진 buffer를 출력하게 됩니다.

위 그림에 첫 I'm sosal!!은 본인이 직접 입력한 문자열입니다.

#include<stdlib.h>, exit(0)에 대한 글은 아래 02.write 글 맨 아래를 참조하세요.

FILE 게시물들은
begining Linux programing.
Linux 언쉬리드' 를 참고하였습니다.