Я удалил бы этот вопрос, но, вероятно, это могло сэкономить время
Таким образом, я использовал: ENV{variable}="$attr{variable}"
В файловых системах Unix или Linux нет никакого символа конца файла. read()
системный вызов возвращается 0 на условии конца файла, если используемый дескриптор файла относится к регулярному файлу. read()
работы по-другому над сокетами и каналами. Вы не заставляете специальный символ отмечать конец файла.
wc
дал Вам 30 как символ или количество байта, потому что первая строка имеет 12 символов, считая конец строки (перевод строки ASCII, 0x0a численно), и вторая строка имеет 18, также считая новую строку (иначе перевод строки).
Можно перепроверить счетчик символов в этом случае с ls -l
, и если Вы имеете hexdump
или xxd
можно получить шестнадцатеричную распечатку, показывающую Вам, 0x0a оценил новые строки.
Стандартная библиотечная функция C fgetc()
действительно возвращается-1 на конце файла, но это сделано в коде библиотеки, не Unix (или Linux) или read()
системный вызов.
Это - число байтов в файле. См. страницу справочника.
Вот пример с 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
od
управляйте показывает новую строкуnl
в конце. Почему это так? – user3539 28.02.2013, 04:49