в Linux это нормально, что в конце файла нет нулевого символа - PullRequest
4 голосов
/ 28 марта 2011

в Linux, это нормально, что в конце файла нет нулевого символа?

Я создал пустой файл и открыл с помощью коврика для мыши, записал az.

сохрани его.1005 *

когда я открываю файл с помощью шестнадцатеричного редактора, нулевого символа нет, но есть 0a.

какой нулевой символ следует поставить в конце файла?

когда я пишу файл системным вызовом.

это 0a?или 0?

спасибо

Ответы [ 4 ]

7 голосов
/ 28 марта 2011

Обычно в конце файлов в Unix нет нулевого символа. Пустой текстовый файл имеет ноль байтов. Одна пустая строка будет иметь символ 0x0A (LF, перевод строки). Текстовые файлы Unix имеют одиночные окончания строк LF.

5 голосов
/ 28 марта 2011

Файловая система записывает количество байтов в файле, и все байты могут иметь любое значение - никакое конкретное символьное / байтовое значение не является зарезервированным дозорным значением, означающим конец файла.Таким образом, вы можете иметь NUL в любом месте файла, но он не нужен для обозначения конца.

Каждая строка в текстовом файле должна действительно заканчиваться переводом строки, ASCII 10 dec, 0A hex (в Windows это будет возврат каретки ASCII 13 декабря с последующей переводом строки).Если вы создадите пустой файл ala echo > filename, у него будет один перевод строки, но только потому, что по умолчанию echo выводит пустую строку.Если бы вы вместо этого использовали touch filename, это было бы совершенно пусто.

Когда вы cat > filename и вводите что-то в окно терминала / консоли, вы в конечном итоге используете Control-D для вызова условия конца файла (для Linux / Control-Z в DOS), но этот символ не сохраняется в самом файле.

2 голосов
/ 28 марта 2011

0a - это новая строка, aka control-J или \n. Текстовые файлы обычно не заканчиваются нулевым символом в Unix.

0 голосов
/ 28 марта 2011

Зависит от того, кто реализовал формат файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...