예제에 사용할 test.txt 파일에는 아래와 같이 5바이트씩 문장이 입력되어 있습니다. 표준 출력함수 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
]$
|