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
]$
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 파일 열기 함수 fopen() (0) | 2020.07.04 |
---|---|
undefined reference to symbol 'ceil@@GLIBC_2.4' 해결 방법은? (0) | 2020.06.16 |
라자루스 Ansi to UTF8, UTF8 to Ansi 변환 (0) | 2020.03.18 |