Программирование Cи / Богатырев_Язык Си в системе Unix
.pdfА. Богатырёв, 1992-96 |
- 341 - |
Си в UNIX™ |
10.Примеры.
Вданном приложении приводится несколько содержательных и достаточно больших примеров, которые иллюстрируют как сам язык Си, так и некоторые возможности системы UNIX, а также некоторые про-
граммистские приемы решения задач при помощи Си. Многие из этих примеров содержат в качестве своих частей ответы на некоторые из задач. Некоторые примеры позаимствованы из других книг, но допол-
нены и исправлены. Все примеры проверены в действии. Смысл некоторых функций в примерах может оказаться вам неизвестен; однако в силу того, что данная книга не является учебником, мы отсылаем вас за подробностями к "Оперативному руководству" (man) по операционной системе UNIX и к документации по системе.
И в заключение - несколько слов о путях развития языка "C". Чистый язык "C" уже отстал от современных технологий программирования. Такие методы как модули (языки "Modula-2", "Ada", "CLU"), родовые пакеты ("Ada", "CLU"), объектно-ориентированное программирование ("Smalltalk", "CLU") требуют новых средств. Поэтому в настоящее время "C" постепенно вытесняется более мощным и интеллектуальным языком "C++" †, обладающим средствами для объектно-ориентированного программирования и родовых классов. Существуют также расширения стандартного "C" объектно-ориентированными возможностями ("Objective-C"). Большой простор предоставляет также сборка программ из частей, написанных на разных языках программирования (например, "C", "Pascal", "Prolog").
† C++ как и C разработан в AT&T; произносится "Си плас-плас"
‡‡‡ Автор благодарит авторов программ и книг по Си и UNIX, по которым некогда учился я сам; коллег из ИПК Минавтопрома/Демоса; программистов из сетей Usenet и Relcom, давших материалы для задач и рассуждений; слушателей курсов по Си за многочисленный материал для книги.
А.Богатырев.
Ученью не один мы посвятили год, Потом других учить пришел и нам черед. Какие ж выводы из этой всей науки?
Из праха мы пришли, нас ветер унесет. Омар Хайям
Оглавление.
0. |
Напутствие в качестве вступления. ................................................................................................. |
2 |
|
1. |
Простые программы и алгоритмы. Сюрпризы, советы. ................................................................... |
4 |
|
2. |
Массивы, строки, указатели. ........................................................................................................... |
70 |
|
3. |
Мобильность и машинная зависимость программ. Проблемы с русскими буквами. ...................... |
106 |
|
4. |
Работа с файлами. .......................................................................................................................... |
118 |
|
5. |
Структуры данных. ........................................................................................................................... |
148 |
|
6. |
Системные вызовы и взаимодействие с UNIX. ............................................................................... |
161 |
|
6.1. Файлы и каталоги. ........................................................................................................................ |
163 |
||
6.2. Время в UNIX. ............................................................................................................................... |
171 |
||
6.3. Свободное место на диске. .......................................................................................................... |
179 |
||
6.4. Сигналы. ....................................................................................................................................... |
182 |
||
6.5. Жизнь процессов. ......................................................................................................................... |
189 |
||
6.6. Трубы и FIFO-файлы. .................................................................................................................... |
198 |
||
6.7. Нелокальный переход. .................................................................................................................. |
200 |
||
6.8. Хозяин файла, процесса, и проверка привелегий. ....................................................................... |
202 |
||
6.9. Блокировка доступа к файлам. ..................................................................................................... |
206 |
||
6.10. Файлы устройств. ....................................................................................................................... |
210 |
||
6.11. Мультиплексирование ввода-вывода ........................................................................................... |
222 |
||
6.12. Простой интерпретатор команд. ................................................................................................. |
233 |
||
7. |
Текстовая обработка. ...................................................................................................................... |
243 |
|
8. |
Экранные библиотеки и работа с видеопамятью. ........................................................................... |
299 |
|
9. |
Приложения. .................................................................................................................................... |
338 |
|
9.1. Таблица приоритетов операций языка C++ ................................................................................... |
338 |
||
9.2. Правила преобразований типов. .................................................................................................. |
338 |
||
9.3. Таблица шестнадцатеричных чисел (HEX). ................................................................................... |
339 |
||
9.4. Таблица степеней двойки. ............................................................................................................ |
339 |
||
9.5. Двоичный код: внутреннее представление целых чисел. ............................................................. |
340 |
||
10. Примеры. ....................................................................................................................................... |
341 |
||
Пример 1. |
Размен монет. ................................................................................................................... |
|
|
Пример 2. |
Подсчет букв в файле. ...................................................................................................... |
|
|
Пример 3. |
Центрирование строк. ....................................................................................................... |
|
|
Пример 4. |
Разметка текста для nroff. ................................................................................................ |
|
|
Пример 5. |
Инвертирование порядка слов в строках. ......................................................................... |
|
|
Пример 6. |
Пузырьковая сортировка. .................................................................................................. |
|
|
Пример 7. |
Хэш-таблица. ..................................................................................................................... |
|
|
Пример 8. |
Простая база данных. ....................................................................................................... |
|
|
Пример 9. |
Вставка/удаление строк в файл. ....................................................................................... |
|
|
Пример 10. |
Безопасный free, позволяющий обращения к автоматическим переменным. ................ |
|
|
Пример 11. |
Поимка ошибок при работе с динамической памятью. ................................................... |
|
|
Пример 12. |
Копирование/перемещение файла. ................................................................................ |
|
|
Пример 13. |
Обход поддерева каталогов в MS DOS при помощи chdir. ............................................ |
|
|
Пример 14. |
Работа с сигналами. ........................................................................................................ |
|
|
Пример 15. |
Управление скоростью обмена через линию. ................................................................. |
|
|
Пример 16. |
Просмотр файлов в окнах. .............................................................................................. |
|
|
Пример 17. |
Работа с иерархией окон в curses. Часть проекта uxcom. ............................................ |
|
|
Пример 18. |
Поддержка содержимого каталога. Часть проекта uxcom. ............................................. |
|
Пример 19. |
Роллируемое меню. Часть проекта uxcom. .................................................................... |
|
Пример 20. |
Выбор в строке-меню. Часть проекта uxcom. ................................................................ |
|
Пример 21. |
Редактор строки. Часть проекта uxcom. ......................................................................... |
|
Пример 22. |
Выбор в прямоугольной таблице. Часть проекта uxcom. ............................................... |
|
Пример 23. |
UNIX commander - простой визуальный Шелл. Головной модуль проекта uxcom. ....... |
|
Пример 24. |
Общение двух процессов через "трубу". ........................................................................ |
|
Пример 25. |
Общение процессов через FIFO-файл. ........................................................................... |
|
Пример 26. |
Общение процессов через общую память и семафоры. ................................................ |
|
Пример 27. |
Протоколирование работы программы при помощи псевдотерминала и процессов. .... |
|
Пример 28. |
Оценка фрагментированности файловой системы. ........................................................ |
|
Пример 29. |
Восстановление удаленного файла в BSD-2.9. .............................................................. |
|
Пример 30. |
Копирование файлов из MS DOS в UNIX. ...................................................................... |
|
Пример 31. |
Программа, печатающая свой собственный текст. ......................................................... |
|
Пример 32. |
Форматирование текста Си-программы. ........................................................................ |
|
1.11. Треугольник из звездочек. .......................................................................................................... |
6 |
|
1.34. Простые числа. ........................................................................................................................... |
10 |
|
1.36. Целочисленный квадратный корень. ........................................................................................... |
12 |
|
1.39. Вычисление интеграла по Симпсону. ......................................................................................... |
13 |
|
1.49. Сортировка Шелла. ..................................................................................................................... |
19 |
|
1.50. Быстрая сортировка. ................................................................................................................... |
20 |
|
1.67. Функция чтения строки. .............................................................................................................. |
26 |
|
1.88. Перестановки элементов. ........................................................................................................... |
35 |
|
1.117. Схема Горнера. ......................................................................................................................... |
50 |
|
1.137. Системная функция qsort - формат вызова. ............................................................................ |
58 |
|
1.146. Процесс компиляции программ. ............................................................................................... |
66 |
|
2.58. Функция bcopy. .......................................................................................................................... |
92 |
|
2.59. Функция strdup. .......................................................................................................................... |
95 |
|
2.61. Упрощенный аналог функции printf. ........................................................................................... |
96 |
|
3.9. _ctype[] |
.......................................................................................................................................... |
109 |
3.12. Программа транслитерации: tr. .................................................................................................. |
112 |
|
3.16. Функция записи трассировки (отладочных выдач) в файл. ........................................................ |
114 |
|
3.18. Условная компиляция: #ifdef ........................................................................................................ |
114 |
|
4.39. Быстрый доступ к строкам файла. .............................................................................................. |
139 |
|
4.45. Эмуляция основ библиотеки STDIO, по мотивам 4.2 BSD. ......................................................... |
142 |
|
5.12. Отсортированный список слов. .................................................................................................. |
155 |
|
5.16. Структуры с полями переменного размера. ............................................................................... |
157 |
|
5.17. Список со "старением". .............................................................................................................. |
159 |
|
6.1.1. Определение типа файла. .......................................................................................................... |
163 |
|
6.1.3. Выдача неотсортированного содержимого каталога (ls). .......................................................... |
165 |
|
6.1.5. Рекурсивный обход каталогов и подкаталогов. ......................................................................... |
166 |
|
6.2.9. Функция задержки в микросекундах. ......................................................................................... |
173 |
|
6.4.3. Функция sleep. .......................................................................................................................... |
187 |
|
6.10.1. Определение текущего каталога: функция getwd. .................................................................. |
217 |
|
6.10.2. Канонизация полного имени файла. ........................................................................................ |
221 |
|
6.11.1. Мультиплексирование ввода из нескольких файлов. ............................................................... |
223 |
|
6.11.2. Программа script. .................................................................................................................... |
225 |
|
7.12. Программа uniq. ......................................................................................................................... |
244 |
|
7.14. Расширение табуляций в пробелы, функция untab. ................................................................... |
245 |
|
7.15. Функция tabify. ........................................................................................................................... |
245 |
|
7.25. Поиск методом половинного деления. ....................................................................................... |
247 |
|
7.31. Программа печати в две полосы. ............................................................................................... |
251 |
|
7.33. Инвертирование порядка строк в файле. ................................................................................... |
255 |
|
7.34. Перенос неразбиваемых блоков текста. ..................................................................................... |
257 |
7.36. Двоичная сортировка строк при помощи дерева. ...................................................................... |
259 |
7.41. Функция match. .......................................................................................................................... |
266 |
7.43. Функция контекстной замены по регулярному выражению. ....................................................... |
270 |
7.44. Алгоритм быстрого поиска подстроки в строке. ........................................................................ |
272 |
7.52. Коррекция правописания. ........................................................................................................... |
276 |
7.67. Калькулятор-1. ............................................................................................................................ |
283 |
7.68. Калькулятор-2. ............................................................................................................................ |
289 |
8.1. Осыпающиеся буквы. .................................................................................................................... |
301 |
8.13. Использование библиотеки termcap. ......................................................................................... |
309 |
8.17. Разбор ESC-последовательностей с клавиатуры. ....................................................................... |
320 |
11.Список литературы.
(1)Б.Керниган, Д.Ритчи, А.Фьюер. Язык программирования Си. Задачи по языку Си. - М.: Финансы и статистика, 1985.
(2)М.Уэйт, С.Прата, Д.Мартин. Язык Си. Руководство для начинающих. - М.: Мир, 1988.
(3)М.Болски. Язык программирования Си. Справочник. - М.: Радио и связь, 1988.
(4)Л.Хэнкок, М.Кригер. Введение в программирование на языке Си. - М.: Радио и связь, 1986.
(5)М.Дансмур, Г.Дейвис. ОС UNIX и программирование на языке Си. - М.: Радио и связь, 1989.
(6)Р.Берри, Б.Микинз. Язык Си. Введение для программистов. - М.: Финансы и статистика, 1988.
(7)М.Беляков, А.Ливеровский, В.Семик, В.Шяудкулис. Инструментальная мобильная операционная система ИНМОС. - М.: Финансы и статистика, 1985.
(8)К.Кристиан. Введение в операционную систему UNIX. - М.: Финансы и статистика, 1985.
(9)Р.Готье. Руководство по операционной системе UNIX. - М.: Финансы и статистика, 1986.
(10)М.Банахан, Э.Раттер. Введение в операционную систему UNIX. - М.: Радио и связь, 1986.
(11)С.Баурн. Операционная система UNIX. - М.: Мир, 1986.
(12)П.Браун. Введение в операционную систему UNIX. - М.: Мир, 1987.
(13)M.Bach. The design of the UNIX operating system. - Prentice Hall, Englewood Cliffs, N.J., 1986.
(14)S.Dewhurst, K.Stark. Programming in C++. - Prentice Hall, 1989.
(15)M.Ellis, B.Stroustrup. The annotated C++ Reference Manual. - Addison-Wesley, 1990.