Файловая система записывает количество байтов в файле, и все байты могут иметь любое значение - никакое конкретное символьное / байтовое значение не является зарезервированным дозорным значением, означающим конец файла.Таким образом, вы можете иметь NUL в любом месте файла, но он не нужен для обозначения конца.
Каждая строка в текстовом файле должна действительно заканчиваться переводом строки, ASCII 10 dec, 0A hex (в Windows это будет возврат каретки ASCII 13 декабря с последующей переводом строки).Если вы создадите пустой файл ala echo > filename
, у него будет один перевод строки, но только потому, что по умолчанию echo выводит пустую строку.Если бы вы вместо этого использовали touch filename
, это было бы совершенно пусто.
Когда вы cat > filename
и вводите что-то в окно терминала / консоли, вы в конечном итоге используете Control-D для вызова условия конца файла (для Linux / Control-Z в DOS), но этот символ не сохраняется в самом файле.