Я хотел прочитать содержимое файла, используя функцию read (). Я попробовал следующее:
#define BUFFER_LENGTH (1024)
char buffer[BUFFER_LENGTH];
// The first version of the question had a typo:
// void read_file(const char filename)
// This would produce a compiler warning.
void read_file(const char *filename)
{
ssize_t read_bytes = 0;
// The first version had the mode in hex instead of octal.
//
// int fd_in = open(filename, O_RDONLY, 0x00644);
//
// This does not cause problems here but it is wrong.
// The mode is now octal (even if it is not needed).
int fd_in = open(filename, O_RDONLY, 0644);
if (fd_in == -1)
{
return;
}
do
{
read_bytes = read(fd_in, buffer, (size_t) BUFFER_LENGTH);
printf("Read %d bytes\n", read_bytes);
// End of file or error.
if (read_bytes <= 0)
{
break;
}
} while (1);
close(fd_in);
}
Я использую «gcc (GCC) 3.4.2 (mingw-special)» в системе Windows 7.
Странное поведение, которое я получаю, это то, что не весь контент читается. Например, у меня есть
файл
05.01.2012 12:28 15.838 hello.exe
и когда я пытаюсь прочитать это, я получаю:
Read 216 bytes
Read 0 bytes
Насколько я знаю, read () должен продолжать чтение, пока не достигнет конца файла. Пока делает
он сообщает об окончании файла (0) во второй раз, когда он вызывается?
Может быть, я упускаю что-то очевидное, но не вижу этого. Я прочитал этот документ и этот документ снова и снова, и я не могу найти, что я делаю неправильно. У кого-нибудь есть подсказка?
EDIT
Спасибо за подсказку! Это опечатка в вопросе (я исправил это). Правильно в источнике
Код.