UNIX — универсальная среда программирования | страница 39
>$ cat junk
>now is the time
>for all good people
>$
Команда >od ("octal dump" — восьмеричный дамп) выдает "изображение" всех байтов файла:
>$ od -с junk
>0000000 n o w i s t h e t i m e \n
>0000020 f o r a l l g o o d p e o
>0000040 p l e \n
>0000044
>$
Флаг >-с означает, что следует интерпретировать байты как символы. Если добавить флаг >-b, то можно, кроме того, показать байты как восьмеричные числа.[5]
>$ od -cb junk
>0000000 n o w i s t h e t i m e \n
> 156 157 167 040 151 163 040 164 150 145 040 164 151 155 145 012
>0000020 f o r a l l g o o d p e o
> 146 157 162 040 141 154 154 040 147 157 157 144 040 160 145 157
>0000040 d l e \n
> 160 154 145 012
>0000044 $
Семизначные числа в колонке слева показывают место в файле, т.е. порядковый номер следующего изображаемого символа в восьмеричной форме. Между прочим, приоритет восьмеричных чисел — это пережиток времен PDP-11, когда восьмеричной нотации отдавалось предпочтение. Для других машин больше подходит шестнадцатеричная нотация; флаг >-х предписывает команде >od печатать информацию в шестнадцатеричной форме.
Обратите внимание на то, что после каждой строки идет символ с восьмеричным значением 012. Это символ перевода строки для ASCII; система помещает его во входной поток, когда вы нажимаете клавишу RETURN. По соглашению, заимствованному из языка Си, символ перевода строки изображается как >\n, что лишь облегчает чтение. Такого соглашения придерживаются только программы типа >od; в файле же хранится единственный байт 012.
Перевод строки — наиболее типичный пример специального символа. Другими специальными символами, связанными с некоторыми операциями управления терминалом, являются символы: шаг назад (восьмеричное значение 010 изображается как >\b), табуляция (011, >\t), возврат каретки (015, >\r).
Важно в каждом случае различать, в каком виде символ хранится в файле и как он интерпретируется в той или иной ситуации. Например, когда вы вводите с клавиатуры символ "шаг назад" (предполагая, что это ваш символ стирания), система воспринимает его как требование уничтожить символ, введенный перед ним. Оба символа — и стираемый, и "шаг назад" — на терминале исчезают, а курсор возвращается на одну позицию назад.
Если ввести последовательность
>\←
(т.е. символ >\ и вслед за ним "шаг назад"), то ядро в этом случае "считает", что вы действительно хотите ввести символ