В табл. 6.2 перечислены некоторые средства работы со строками и ряд полезных функций, одна из которых strcmp
. Как правило, лучше воспользоваться этими стандартными функциями, чем писать собственные, так как они отлажены и зачастую выполняются быстрее, чем написанные вами, поскольку были оптимизированы для конкретных машин (нередко благодаря использованию Ассемблера).
strcat(s,t) | Добавляет строку t к строке s ; возвращает s |
strncat(s,t,n) | Добавляет не более n символов t к s |
strcpy(s,t) | Копирует t в s ; возвращает s |
strncpy(s,t,n) | Копирует точно n символов; при необходимости добавляет NULL |
strcmp(s,t) | Сравнивает s и t , возвращает <0, 0, >0 при <, ==, > |
strncmp(s,t,n) | Сравнивает не более n символов |
strlen(s) | Возвращает длину s |
strchr(s,c) | Возвращает указатель на первый символ с в s и NULL , если с отсутствует |
strrchr(s,c) | Возвращает указатель на последний с в s и NULL , если с отсутствует. |
atoi(s) | Возвращает целое значение s |
atof(s) | Возвращает "плавающее" значение s ; необходимо описание double atof() |
malloc(n) | Возвращает указатель на область памяти в n байт и NULL , если это невозможно |
calloc(n,m) | Возвращает указатель на n*m обнуленных байтов и NULL , если это невозможно; malloc и calloc возвращают значение типа char* |
free(p) | Освобождает память, выделенную malloc и calloc |
Таблица 6.2: Стандартные функции, выполняемые над строками
Измените аргумент -s
так, чтобы vis -sn
печатала только строки из n
или более печатаемых символов, опуская непечатаемые символы и короткие последовательности обычных, печатаемых символов. Это полезно при выделении ''текстовых'' частей в нетекстовых файлах, таких, как рабочие программы. Некоторые версии системы содержат для подобных целей программу strings
. Что лучше: иметь отдельную программу или пользоваться специальным аргументом vis
?
Доступность исходной программы на Си — одно из достоинств системы UNIX; такая программа демонстрирует элегантные решения многих программистских проблем. Прокомментируйте баланс между наглядностью программы на Си и встречающимися "оптимизированными" фрагментами, переписанными на Ассемблере.
6.3 Доступ к файлам: vis
версия 3
Две первые версии vis
читают из стандартного входного потока и пишут в стандартный выходной поток, причем оба потока наследуются от shell
. Следующий шаг модификация vis
для работы с файлами по их именам, так что
$ vis файл1 файл2 ...
будет просматривать эти именованные файлы вместо стандартного входного потока. Если же имен файлов в качестве аргументов нет, vis
должна читать стандартный входной поток.
Возникает вопрос: как организовать чтение файлов, т.е. как связать имена файлов с операторами ввода вывода, реально читающими данные? Правила просты. Прежде чем быть прочитанным или записанным, файл должен быть fopen
. Последняя берет имя файла (например, temp
или /etc/passwd
), взаимодействует с ядром и возвращает обратно "внутреннее имя", которое используется при последующих операциях с данным файлом.
Внутреннее имя является на самом деле указателем (называемым
и имеет имя FILE
. Описание указателя файла таково:
FILE *fp;
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии