Счетчик символов в команде туалета Unix

Я удалил бы этот вопрос, но, вероятно, это могло сэкономить время

Таким образом, я использовал: ENV{variable}="$attr{variable}"

6
28.02.2013, 16:17
2 ответа

В файловых системах Unix или Linux нет никакого символа конца файла. read() системный вызов возвращается 0 на условии конца файла, если используемый дескриптор файла относится к регулярному файлу. read() работы по-другому над сокетами и каналами. Вы не заставляете специальный символ отмечать конец файла.

wc дал Вам 30 как символ или количество байта, потому что первая строка имеет 12 символов, считая конец строки (перевод строки ASCII, 0x0a численно), и вторая строка имеет 18, также считая новую строку (иначе перевод строки).

Можно перепроверить счетчик символов в этом случае с ls -l, и если Вы имеете hexdump или xxd можно получить шестнадцатеричную распечатку, показывающую Вам, 0x0a оценил новые строки.

Стандартная библиотечная функция C fgetc() действительно возвращается-1 на конце файла, но это сделано в коде библиотеки, не Unix (или Linux) или read() системный вызов.

8
27.01.2020, 20:25
  • 1
    я не помещал перевод строки после второй строки. Но od управляйте показывает новую строку nl в конце. Почему это так? –  user3539 28.02.2013, 04:49
  • 2
    @user3539 - Это традиционно / конвенция для текстовых редакторов Unix/Linux/BSD для помещения новой строки/перевода строки в конце последней строки в файле, даже если Вы не делаете. При создании файла с vi/vim, исключая или редактором, он сделал это для Вас. Я не знаю обо всех них современные, редакторы GUI, но я предполагаю, что они делают это также. –  Bruce Ediger 28.02.2013, 05:12
  • 3
    @user3539 Да, Вы сделали. Все строки в текстовом файле заканчиваются новой строкой, включая последнюю. Видеть Какой смысл того, чтобы добавить новую строку в конец файла? –  Gilles 'SO- stop being evil' 28.02.2013, 16:17
  • 4
    Gilles: В то время как распространено, что все строки в текстовом файле заканчиваются новой строкой, это не требуется. Unix не имеет никакого специального "текстового" формата файла. Все обычные файлы просто не структурированы (файловой системой) последовательности байтов, которые могут или не могут закончиться в новой строке. Например, на Linux или OS X, "повторяют-n нечто>, foo.txt" создаст файл, содержащий три 7-разрядных символа ASCII и никакую новую строку завершения. –  Tim B 01.03.2013, 16:21

Это - число байтов в файле. См. страницу справочника.

Вот пример с 5 байтами:

$ echo 1234 > foo.txt
$ od -ta foo.txt
0000000   1   2   3   4  nl
0000005
$ ls -l foo.txt
-rw-r--r-- 1 tim None 5 Feb 27 21:26 foo.txt
$ wc foo.txt
1 1 5 foo.txt

Теперь добавьте пустую строку:

$ echo >> foo.txt
$ ls -l foo.txt
-rw-r--r-- 1 tim None 6 Feb 27 21:29 foo.txt
$ wc foo.txt
2 1 6 foo.txt
1
27.01.2020, 20:25

Теги

Похожие вопросы