LINUX.ORG.RU

C, read(), EOF


0

0

Подскажите плз как читая файл с помощью ф-ии read определить его конец? Интересует именно считывание символа конца файла, а не возвращаемое значение функции read.

> Подскажите плз как читая файл с помощью ф-ии read определить его конец? Интересует именно считывание символа конца файла, а не возвращаемое значение функции read.

"символа конца файла" не существует. Проверять конец файла стоит по возвращаемому значению, она возвращает реальное число прочитанных байт (или -1 в случае ошибки), т.е. если она вернет число, меньшее чем кол-во байт, которая она должна была прочесть - значит файл кончился.

paxac
()
Ответ на: комментарий от klalafuda

Выводил все - у последнего считанного символа был код 10 - это вроде перенос строки, а не конец файла...

EvgenyVoid
() автор топика
Ответ на: комментарий от EvgenyVoid

> Выводил все - у последнего считанного символа был код 10 - это вроде перенос строки, а не конец файла...

я же говорю, никакого символа конца файла нет в природе! как это вы себе представляете? всего 256 байт может быть, в файле могут содежаться все из них. Откуда вы хотите взять 257-ой байт для конца файла? Длина файла хранится в inode или т.п. "EOF" - это ничто иное как (unsigned int)-1 (или unsigned long? не помню, но не unsigned char точно), если, к примеру, fgetc доходит до конца файла, то она фозаращает -1, с 0xff перепутать не получится, т.к. (unsigned int)-1 != (unsigned char)-1.

paxac
()
Ответ на: комментарий от mv

man 2 read

конец файла это когда read() вернёт 0.

mky ★★★★★
()

> Интересует именно считывание символа конца файла, а не возвращаемое значение функции read.

Странный какой-то интерес, если честно :) Что мешает проверять возвращаемое значение? Ну а вообще маны читать надо man 2 read даёт

RETURN VALUE
On success, the number of bytes read is returned (zero indicates end of
file), and the file position is advanced by this number. It is not an
error if this number is smaller than the number of bytes requested; this
may happen for example because fewer bytes are actually available right
now (maybe because we were close to end-of-file, or because we are reading
from a pipe, or from a terminal), or because read() was interrupted by a
signal. On error, -1 is returned, and errno is set appropriately. In
this case it is left unspecified whether the file position (if any)
changes.

lv ★★
()
Ответ на: комментарий от paxac

Ну вы когда нибудь научитесь читать стандартны?

Что возращает getc? Правильно, int, а не char

Так что вполне для признака конца файла можно использовать что угодно, что больше 255.

И EOF имеет смысл только с этой функций, а не при получении данных в буфер

namezys ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.