UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Таблица 6.2: Стандартные функции, выполняемые над строками
Измените аргумент
-s
vis -sn
n
strings
vis
Доступность исходной программы на Си — одно из достоинств системы UNIX; такая программа демонстрирует элегантные решения многих программистских проблем. Прокомментируйте баланс между наглядностью программы на Си и встречающимися "оптимизированными" фрагментами, переписанными на Ассемблере.
6.3 Доступ к файлам:
vis
Две первые версии
vis
shell
vis
$ vis файл1 файл2 ...
будет просматривать эти именованные файлы вместо стандартного входного потока. Если же имен файлов в качестве аргументов нет,
vis
Возникает вопрос: как организовать чтение файлов, т.е. как связать имена файлов с операторами ввода вывода, реально читающими данные? Правила просты. Прежде чем быть прочитанным или записанным, файл должен быть открыт стандартной библиотечной функцией
fopen
temp
/etc/passwd
Внутреннее имя является на самом деле указателем (называемым указателем файла) на структуру, содержащую информацию о файле, такую, как расположение буфера, текущую позицию символа в буфере, режим чтения или записи и т.п. Эта структура определяется в файле
<stdio.h>
FILE
FILE *fp;
Оно означает, что
fp
FILE
fopen
FILE
<stdio.h>
fopen
fopen
char *name, *mode;
fr = fopen(name, mode);
Первый аргумент
fopen
"r"
"w"
"а"
Если файл, который вы открыли для записи или дописывания, не существует, он создается, если это возможно. Открытие для записи существующего файла вызывает уничтожение старого содержимого. Попытка читать несуществующий файл считается ошибкой, так же как и попытка читать или писать файл без разрешения. При возникновении ошибки
fopen
NULL
<stdio.h>
(char*)0
Далее, нужен способ читать или писать файл после того, как он открыт. Есть несколько способов, из которых использование
getc
putc
getc
с = getc(fp)
помещает в
с
fp
EOF
putc
getc
putc(c, fp)
помещает символ
с
fp
с
getc
putc
EOF
Когда программа начинает выполняться, уже открыты три файла и имеются их указатели. Это стандартные потоки: входной, выходной и поток диагностики; соответствующие указатели называются
stdin
stdout
stderr
<stdio.h
FILE*
getchar()
getc(stdin)
putchar(c)
putc(c, stdout)
<stdio.h>
<stdio.h>
stdin | Стандартный входной поток |
stdout | Стандартный выходной поток |
stderr | Стандартный поток диагностики |
EOF | Конец файла; обычно -1 |
NULL | Несуществующий указатель; обычно 0 |
FILE | Используется для описания указателей на файлы |
BUFSIZ | Обычно размер буфера ввода вывода (часто 512 или 1024) |
getc(fp) | Возвращает один символ из потока fp |
getchar() | getc(stdin) |
putc(c,fp) | Помещает символ с fp |
putchar(c) | putс(с,stdout) |
feof(fp) | Не нуль, если достигнут конец файла для потока fp |
ferror(fp) | Не нуль, если в потоке fp |
fileno(fp) | Дескриптор файла для потока fp |