Programming Language/C Language
C언어) read() 함수
manchesterandthecity
2021. 6. 15. 18:54
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 == 실패, 정상적으로 실행되었다면 읽어들인 바이트 수
예제
예제에 사용할 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 $ |
참고 :
https://badayak.com/4486?category=887532