UNIX — универсальная среда программирования, стр. 75
6.1 Стандартные входной и выходной потоки: программа
visМногие программы читают только из одного входного потока и пишут в один выходной поток: для таких программ полностью подходят функции ввода-вывода, использующие лишь стандартные входной и выходной потоки, и для того чтобы начать работу, этого почти всегда достаточно.
Проиллюстрируем изложенное с помощью программы
vis\nnnnnnVisvis$ cat x abc$ vis < xabc\010\010\010 ___ $Чтобы просмотреть несколько файлов с помощью этой элементарной версии
viscat$ cat файл1 файл2 ... | vis...$ cat файл1 файл2 ... | vis | grep '\\'...и избежать тем самым выяснения способа доступа к файлам из программы.
Между прочим, может показаться, что подобную работу следует выполнить с привлечением
sed'1'$ sed -n 1 xabc←←←___ $Результат выполнения программы
sedvissed$ sed -n 1 /usr/you/bin$(Так получилось на PDP-11; в одной из систем для VAX
sedsedПростейшие функции ввода и вывода
getcharputchargetcharputchar(c)Функция
printf(3)printfputcharscanf(3)scanfgetcharПриведем первую версию
vis/* vis: make funny characters visible (version 1) */#include <stdio.h>#include <ctype.h>main() { int c; while ((c = getchar()) != EOF) if (isascii(c) && (isprint(с) || c=='\n' || c=='\t' || c==' ')) putchar(c); else printf("\\%03o", c); exit(0);}Getcharintchar#include <stdio.h>должна находиться в начале каждого исходного файла. Это заставляет компилятор Си читать файл макроопределений (
/usr/include/stdio.hEOF<stdio.h>Файл
<ctype.h>/usr/includeisasciiisprint<ctype.h>isalpha(c) | Буква принадлежит алфавиту: a-z A-Z |
isupper(c) | Прописная буква: A-Z |
islower(с) | Строчная буква: a-z |
isdigit(c) | Цифра: 0-9 |
isxdigit(c) | Шестнадцатеричная цифра: 0-9 a-f A-F |
isalnum(c) | Буква или цифра |
isspace(c) | Пробел, символ табуляции, символ перевода строки, символ вертикальной табуляции, символ перевода страницы, символ возврата |
ispunct(c) | Не буквенно-цифровой символ, не управляющий, не пробел |
isprint(c) | Печатаемый: любой графический символ |
iscntrl(c) | Управляющий символ: 0 <= с < 040 || с == 0177 |
isascii(c) | Символ ASCII: 0 <= с <= 0177 |