birmaga.ru
добавить свой файл

1 2 ... 80 81


А.П. Полищук, С.А. Семериков


Системное программирование в UNIX
средствами Free Pascal



Содержание


Предисловие 9

О книге 9

Назначение этой книги 9

Спецификация Х/Open 10

Структура книги 11

Что вы должны знать 11

Соглашения 13

Глава 1. Основные понятия и терминология 14

1.1. Файл 14

1.1.1. Каталоги и пути 14

1.1.2. Владелец файла и права доступа 15

1.1.3. Обобщение концепции файла 15

1.2. Процесс 16

1.2.1. Межпроцессное взаимодействие 16

1.3. Системные вызовы и библиотечные подпрограммы 16

Глава 2. Файл 18

2.1. Примитивы доступа к файлам в системе UNIX 18

2.1.1. Введение 18

2.1.2. Системный вызов fdopen 19

2.1.3. Создание файла при помощи вызова fdopen 21

2.1.4. Системный вызов fdcreat 23

2.1.5. Системный вызов fdclose 23

2.1.6. Системный вызов fdread 24

2.1.7. Системный вызов fdwrite 27

2.1.8. Пример copyfile 28

2.1.9. Эффективность вызовов fdread и fdwrite 30

2.1.10. Вызов fdseek и произвольный доступ 31

2.1.11. Пример: гостиница 32

2.1.12. Дописывание данных в конец файла 34

2.1.13. Удаление файла 35

2.1.14. Системный вызов fcntl 35

2.2. Стандартный ввод, стандартный вывод и стандартный вывод диагностики 36

2.2.1. Основные понятия 36

2.2.2. Программа io 37

2.2.3. Использование стандартного вывода диагностики 39

2.3. Стандартная библиотека ввода/вывода: взгляд в будущее 39

2.4. Системные вызовы и переменная linuxerror 42


2.4.7. Подпрограмма perror 42

Глава 3. Работа с файлами 44

3.1. Файлы в многопользовательской среде 44

3.1.1. Пользователи и права доступа 44

3.1.2. Права доступа и режимы файлов 45

3.1.3. Дополнительные права доступа для исполняемых файлов 46

3.1.4. Маска создания файла и системный вызов umask 47

3.1.5. Вызов fdopen и права доступа к файлу 49

3.1.6. Определение доступности файла при помощи вызова access 49

3.1.7. Изменение прав доступа при помощи вызова chmod 50

3.1.8. Изменение владельца при помощи вызова chown 51

3.2. Файлы с несколькими именами 52

3.2.1. Системный вызов link 52

3.2.2. Системный вызов unlink 52

3.2.3. Системный вызов frename 53

3.2.4. Символьные ссылки 54

3.2.5. Еще об именах файлов 55

3.3. Получение информации о файле: вызов fstat 55

3.3.1. Подробнее о вызове chmod 61

Глава 4. Каталоги, файловые системы и специальные файлы 63

4.1. Введение 63

4.2. Каталоги с точки зрения пользователя 63

4.3. Реализация каталогов 65

4.3.1. Снова о системных вызовах link и unlink 66

4.3.2. Точка и двойная точка 66

4.3.3. Права доступа к каталогам 67

4.4. Использование каталогов при программировании 68

4.4.1. Создание и удаление каталогов 68

4.4.2. Открытие и закрытие каталогов 69

4.4.3. Чтение каталогов: вызовы readdir и rewinddir 70

4.4.4. Текущий рабочий каталог 73

4.4.5. Смена рабочего каталога при помощи вызова chdir 73

4.4.6. Определение имени текущего рабочего каталога 74

4.4.7. Обход дерева каталогов 75

4.5. Файловые системы UNIX 79

4.5.1. Кэширование: вызовы sync и fsync 81

4.6. Имена устройств UNIX 82

4.6.1. Файлы блочных и символьных устройств 83

4.6.2. Структура tstat 83

4.6.3. Информация о файловой системе 84

4.6.4. Ограничения файловой системы: процедуры pathconf и fpathconf 85

Глава 5. Процесс 87

5.1. Понятие процесса 87

5.2. Создание процессов 88

5.2.1. Системный вызов fork 88

5.3. Запуск новых программ при помощи вызова ехес 90

5.3.1. Семейство вызовов ехес 90

5.3.2. Доступ к аргументам, передаваемым при вызове exec 93

5.4. Совместное использование вызовов ехес и fork 94

5.5. Наследование данных и дескрипторы файлов 97

5.5.1. Вызов fork, файлы и данные 97

5.5.2. Вызов ехес и открытые файлы 98

5.6. Завершение процессов при помощи системного вызова halt 99

5.7. Синхронизация процессов 99

5.7.1. Системный вызов wait 99

5.7.2. Ожидание завершения определенного потомка: вызов waitpid 101

5.8. Зомби-процессы и преждевременное завершение программы 103

5.9. Командный интерпретатор smallsh 103

5.10. Атрибуты процесса 109

5.10.1. Идентификатор процесса 109

5.10.2. Группы процессов и идентификаторы группы процессов 111

5.10.3. Изменение группы процесса 111

5.10.4. Сеансы и идентификатор сеанса 111

5.10.5. Переменные программного окружения 112

5.10.6. Текущий рабочий каталог 114

5.10.7. Текущий корневой каталог 114

5.10.8. Идентификаторы пользователя и группы 114

5.10.9. Ограничения на размер файла: вызов ulimit 115

5.10.10. Приоритеты процессов 116

Глава 6. Сигналы и их обработка 118

6.1. Введение 118

6.1.1. Имена сигналов 119

6.1.2. Нормальное и аварийное завершение 122

6.2. Обработка сигналов 123

6.2.1. Наборы сигналов 124

6.2.2. Задание обработчика сигналов: вызов sigaction 125

6.2.3. Сигналы и системные вызовы 129


6.2.4. Процедуры sigsetjmp и siglongjmp 130

6.3. Блокирование сигналов 131

6.4. Посылка сигналов 132

6.4.1. Посылка сигналов другим процессам: вызов kill 132

6.4.2. Посылка сигналов самому процессу: вызовы sigraise и alarm 135

6.4.3. Системный вызов pause 137

6.4.4. Системные вызовы sigpending и sigsuspend 139

Глава 7. Межпроцессное взаимодействие при помощи программных каналов 140

7.1. Каналы 140

7.1.1. Каналы на уровне команд 140

7.1.2. Использование каналов в программе 141

7.1.3. Размер канала 145

7.1.4. Закрытие каналов 147

7.1.5. Запись и чтение без блокирования 147

7.1.6. Использование системного вызова select для работы с несколькими каналами 150

7.1.7. Каналы и системный вызов ехес 155

7.2. Именованные каналы, или FIFO 158

7.2.1. Программирование при помощи каналов FIFO 160

Глава 8. Дополнительные методы межпроцессного взаимодействия 164

8.1. Введение 164

8.2. Блокировка записей 164

8.2.1. Мотивация 164

8.2.2. Блокировка записей при помощи вызова fcntl 165

8.3. Дополнительные средства межпроцессного взаимодействия 172

8.3.1. Введение и основные понятия 172

8.3.2. Очереди сообщений 174

8.3.3. Семафоры 184

8.3.4. Разделяемая память 190

8.3.5. Команды ipcs и ipcrm 195

Глава 9. Терминал 197

9.1. Введение 197

9.2. Терминал UNIX 199

9.2.1. Управляющий терминал 199

9.2.2. Передача данных 200

9.2.3. Эхо-отображение вводимых символов и опережающий ввод с клавиатуры 200

9.2.4. Канонический режим, редактирование строки и специальные символы 201

9.3. Взгляд с точки зрения программы 203

9.3.1. Системный вызов fdopen 203

9.3.2. Системный вызов fdread 204


9.3.3. Системный вызов fdwrite 206

9.3.4. Функции ttyname и isatty 206

9.3.5. Изменение свойств терминала: структура termios 206

9.3.6. Параметры MIN и TIME 213

9.3.7. Другие системные вызовы для работы с терминалом 214

9.3.8. Сигнал разрыва соединения 215

9.4. Псевдотерминалы 216

9.5. Пример управления терминалом: программа tscript 219

Глава 10.Сокеты 225

10.1. Введение 225

10.2. Типы соединения 225

10.3. Адресация 226

10.3.1. Адресация Internet 226

10.3.2. Порты 226

10.4. Интерфейс сокетов 227

10.4.1. Создание сокета 227

10.5. Программирование в режиме TCP-соединения 228

10.5.1. Связывание 229

10.5.2. Включение приема TCP-соединений 229

10.5.3. Прием запроса на установку TCP-соединения 229

10.5.4. Подключение клиента 231

10.5.5. Пересылка данных 232

10.5.6. Закрытие TCP-соединения 234

10.6. Программирование в режиме пересылок UDP-дейтаграмм 236

10.6.1. Прием и передача UDP-сообщений 237

10.7. Различия между двумя моделями 239

Глава 11. Стандартная библиотека ввода/вывода 240

11.1. Введение 240

11.2. Структура TFILE 240

11.3. Открытие и закрытие потоков: процедуры fopen и fclose 241

11.4. Посимвольный ввод/вывод: процедуры getc и putc 243

11.5. Возврат символов в поток: процедура ungetc 244

11.6. Стандартный ввод, стандартный вывод и стандартный вывод диагностики 246

11.7. Стандартные процедуры опроса состояния 247

11.8. Построчный ввод и вывод 248

11.9. Ввод и вывод бинарных данных: процедуры fread и fwrite 250

11.10. Произвольный доступ к файлу: процедуры fseek, rewind и ftell 253

11.11. Форматированный вывод: семейство процедур printf 253

11.12. Форматированный ввод: семейство процедур scanf 258


11.13. Запуск программ при помощи библиотек стандартного ввода/вывода 261

11.14. Вспомогательные процедуры 266

11.14.1. Процедуры freopen и fdopen 266

11.14.2. Управление буфером: процедуры setbuf и setvbuf 266

Глава 12. Разные дополнительные системные вызовы и библиотечные процедуры 268

12.1. Введение 268

12.2. Управление динамическим распределением памяти 268

12.3. Ввод/вывод с отображением в память и работа с памятью 273

12.4. Время 277

12.5. Работа со строками и символами 279

12.5.1. Семейство процедур strings 279

12.5.2. Преобразование строк в числовые значения 281

12.5.3. Проверка и преобразование символов 281

12.6. Дополнительные средства 282

12.6.1. Дополнение о сокетах 283

12.6.2. Потоки управления 283

12.6.3. Расширения режима реального времени 285

12.6.4. Получение параметров локальной системы 285

12.6.5. Интернационализация 286

12.6.6. Математические функции 287

12.6.7. Работа с портами ввода вывода 287

Глава 13. Задачи с решениями 288

13.1. Введение 288

13.2. Обработка текста 288

13.3. Бинарные файлы 306

13.4. Каталоги 310

13.5. Файловые системы 328

13.6. Файловая система proc 330

13.7. Управление файлами 335

13.8. Управление процессами 343

13.9. Программные каналы 352

13.10. Управление терминалом 356

13.11. Дата и время 356

13.12. Генератор лексических анализаторов lex 363

Приложение 1. Коды ошибок переменной linuxerror и связанные с ними сообщения 369

Введение 369

Список кодов и сообщений об ошибках 369

Приложение 2. История UNIX 376

Основные стандарты 376

Приложение 3. Модуль stdio 378

Приложение 4. Замечания о компиляции во Free Pascal 2.0 396

Литература 419





следующая страница >>