본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 파일 읽기 함수 read()

C언어 파일 읽기 함수 read()

· 댓글개 · 바다야크

C read() 파일 읽기 함수

open() 함수로 열기한 파일의 내용을 읽기 합니다.

  • 헤더: unistd.h
  • 형태: ssize_t read (int fd, void *buf, size_t nbytes)
  • 인수: int fd 파일 디스크립터
    void *buf 파일을 읽어 들일 버퍼
    size_t nbytes 퍼버의 크기
  • 반환: ssize_t == -1 실패
    >  0 정상적으로 실행되었다면 읽어들인 바이트 수

C언어 read() 함수 예제

예제에 사용할 test.txt 파일에는 아래와 같이 5바이트씩 문장이 입력되어 있습니다.

12345
ABCDE
abcde
67890

표준 출력함수 fgets() 에는 버퍼가 크더라도 파일의 첫 번째 행만 읽어서 반환하지만 read()는 버퍼의 크기만큼 읽을 수 있다면 모두 읽어 들입니다. 그러므로 read()에서 사용할 버퍼의 크기가 파일 보다 크다면 파일의 모든 내용을 읽어 들이게 됩니다.

아래는 test.txt의 파일 내용보다 버퍼의 크기가 1024로 크기가 크므로 한번에 읽기를 해서 파일의 모든 내용을 출력하는 예제입니다.

#include <stdio.h>         // puts()
#include <string.h>        // strlen()
#include <fcntl.h>         // O_WRONLY
#include <unistd.h>        // write(), close()

#define  BUFF_SIZE   1024

int main()
{
   char   buff[BUFF_SIZE];
   int    fd;

   if ( 0 < ( fd = open( "./test.txt", O_RDONLY))){
      read( fd, buff, BUFF_SIZE);
      puts( buff);
      close( fd);
   } else {
      printf( "파일 열기에 실패했습니다.\n");
   }
   return 0;
}

실행 결과입니다.

]$ a.out
12345
ABCDE
abcde
67890
]$

만일 파일 내용보다 버퍼 크기가 작다면 여러번 읽기를 시도할 수 있습니다.

#include <stdio.h>         // puts()
#include <string.h>        // strlen()
#include <fcntl.h>         // O_WRONLY
#include <unistd.h>        // write(), close()

#define  BUFF_SIZE   5     // 버퍼의 크기가 작습니다.

int main()
{
   char     buff[BUFF_SIZE];
   int      fd;
   ssize_t  rd_size;

   if ( 0 < ( fd = open( "./test.txt", O_RDONLY))){
      while( 0 < ( rd_size = read( fd, buff, BUFF_SIZE-1))){  //  4 byte씩 읽씁니다.
         buff[rd_size]  = '\0';      // puts()를 위해 NULL을 대입
         puts( buff);
      }
      close( fd);
   } else {
      printf( "파일 열기에 실패했습니다.\n");
   }
   return 0;
}

실행 결과입니다.

]$ a.out
1234
5
AB
CDE

abcd
e
67
890
]$
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.