В файловых системах Unix или Linux нет никакого символа конца файла. read()
системный вызов возвращается 0 на условии конца файла, если используемый дескриптор файла относится к регулярному файлу. read()
работы по-другому над сокетами и каналами. Вы не заставляете специальный символ отмечать конец файла.
wc
дал Вам 30 как символ или количество байта, потому что первая строка имеет 12 символов, считая конец строки (перевод строки ASCII, 0x0a численно), и вторая строка имеет 18, также считая новую строку (иначе перевод строки).
Можно перепроверить счетчик символов в этом случае с ls -l
, и если Вы имеете hexdump
или xxd
можно получить шестнадцатеричную распечатку, показывающую Вам, 0x0a оценил новые строки.
Стандартная библиотечная функция C fgetc()
действительно возвращается-1 на конце файла, но это сделано в коде библиотеки, не Unix (или Linux) или read()
системный вызов.