ВикиЧтение
ВикиЧтение
Linux программирование в примерах
Роббинс Арнольд
7.2. Код V7 ls
We use cookies. Read the
Privacy and Cookie Policy
I accept
Содержание
Глава 1 Введение
1.1. Модель файловой системы Linux/Unix
1.4. Почему программы GNU лучше
1.4.1. Проектирование программ
1.4.3. Программирование на С
1.4.5. Заключительные соображения по поводу «GNU Coding Standards»
1.5. Пересмотренная переносимость
1.6. Рекомендуемая литература
1.7. Резюме
Упражнения
Глава 2 Аргументы, опции и переменные окружения
2.3. Разбор опций: getopt() и getopt_long()
2.3.3.2. Длинные опции в стиле POSIX
2.4.2. Окружение в целом: environ
Глава 3 Управление памятью на уровне пользователя
3.2. Выделение памяти
3.2.1. Библиотечные вызовы: malloc() , calloc() , realloc() , free()
3.2.1.3. Освобождение памяти: free()
3.2.1.6. Подведение итогов из GNU Coding Standards
3.2.1.7. Использование персональных программ распределения
3.2.1.9. Только GLIBC: чтение целых строк: getline() и getdelim()
3.2.3. Системные вызовы: brk() и sbrk()
3.2.4. Вызовы ленивых программистов: alloca()
3.3. Резюме
Глава 4 Файлы и файловый ввод/вывод
4.1. Введение в модель ввода/вывода Linux/Unix
4.3. Определение ошибок
4.3.1. Значения errno
4.3.2. Стиль сообщения об ошибках
4.4. Ввод и вывод
4.4.2. Открытие и закрытие файлов
4.4.2.1. Отображение переменных FILE* на дескрипторы файлов
4.4.2.2. Закрытие всех открытых файлов
4.5. Произвольный доступ: перемещения внутри файла
4.6. Создание файлов
4.6.2. Создание файлов с помощью creat()
4.6.3. Возвращаясь к open()
4.7. Форсирование записи данных на диск
4.9. Резюме
Глава 5 Каталоги и служебные данные файлов
5.1. Просмотр содержимого каталога
5.1.4. Переименование файлов
5.1.5. Удаление файла
5.1.5.1. Удаление открытых файлов
5.1.5.2. Использование ISO С: remove()
5.3.1. Базовое чтение каталогов
5.3.1.2. Элементы каталогов Linux и BSD
5.3.2. Функции размещения каталогов BSD
5.4. Получение информации о файлах
5.4.3. Только Linux: указание файлового времени повышенной точности
5.4.4. Определение типа файла
5.5. Смена владельца, прав доступа и времени изменения
5.5.1. Смена владельца файла: chown() , fchown() и lchown()
5.5.2. Изменение прав доступа: chmod() и fchmod()
5.5.3.1. Подделка utime(file, NULL)
5.5.4. Использование fchown() и fchmod() для обеспечения безопасности
Глава 6 Общие библиотечные интерфейсы — часть 1
6.1. Времена и даты
6.1.1. Получение текущего времени: time() и difftime()
6.1.2. Разложение времени: gmtime() и localtime()
6.1.3. Форматирование даты и времени
6.1.4. Преобразование разложенного времени в time_t
6.1.5.1. Системы BSD: timezone() , не timezone
6.2. Функции сортировки и поиска
6.2.1.1. Пример: сортировка сотрудников
6.3. Имена пользователей и групп
6.4. Терминалы: isatty()
6.6. Резюме
Глава 7 Соединяя все вместе: ls
7.3. Резюме
Упражнения
Глава 8 Файловые системы и обходы каталогов
8.1. Монтирование и демонтирование файловых систем
8.1.2. Обзор различных типов файловых систем
8.4. Перемещение по иерархии файлов
8.6. Изменение корневого каталога: chroot()
8.7. Резюме
Глава 9 Управление процессами и каналы
9.1. Создание и управление процессами
9.1.1. Создание процесса: fork()
9.1.1.1. После fork() : общие и различные атрибуты
9.1.1.2. Разделение дескрипторов файлов
9.1.1.3. Разделение дескрипторов файлов и close()
9.1.4. Запуск новой программы: семейство exec()
9.1.4.2. Функции-оболочки: execl() и др.
9.1.4.4. Атрибуты, наследуемые exec()
9.1.5. Завершение процесса
9.1.5.1. Определение статуса завершения процесса
9.1.5.2. Возвращение из main()
9.1.6. Использование статуса завершения порожденного процесса
9.1.6.2. Использование функций BSD: wait3() и wait4()
9.2. Группы процессов
9.2.1. Обзор управления заданиями
9.3. Базовое межпроцессное взаимодействие: каналы и очереди FIFO
9.3.1.2. Буферирование каналов
9.4. Управление дескрипторами файлов
9.4.3. Управление атрибутами файла: fcntl()
9.4.3.1. Флаг close-on-exec
9.4.3.3. Работа с флагами статуса файла и режимами доступа
9.4.3.4. Неблокирующий ввод/вывод для каналов и FIFO
9.4.3.5. Сводка fcntl()
9.6. Рекомендуемая литература
Глава 10 Сигналы
10.1. Введение
10.2. Действия сигналов
10.3. Стандартные сигналы С: signal() и raise()
10.3.2. Программная отправка сигналов: raise()
10.4. Обработчики сигналов в действии
10.4.3. Игнорирование сигналов
10.4.4. Системные вызовы, допускающие повторный запуск
10.4.4.1. Пример: GNU Coreutils safe_read() и safe_write()
10.4.5. Состояния гонок и sig_atomic_t (ISO C)
10.4.6. Дополнительные предостережения
10.4.7. Наша история до настоящего времени, эпизод 1
10.5. API сигналов System V Release 3: sigset() и др.
10.6. Сигналы POSIX
10.6.1. Обнажение проблемы
10.6.2. Наборы сигналов: sigset_t и связанные функции
10.6.3. Управление маской сигналов: sigprocmask() и др.
10.6.4. Перехват сигналов: sigaction()
10.6.5. Извлечение ожидающих сигналов: sigpending()
10.6.6. Создание возможности для прерывания функций: siginterrupt()
10.6.8. Наша история до настоящего времени, эпизод II
10.7. Сигналы для межпроцессного взаимодействия
10.8. Важные сигналы специального назначения
10.8.1.1. Труднее, но с большим контролем: alarm() и SIGALARM
10.8.1.2. Простой и легкий: sleep()
10.8.3. Родительский надзор: три различные стратегии
10.8.3.1. Плохие родители: полное игнорирование потомков
10.9. Сигналы, передающиеся через fork() и exec()
Упражнения
Глава 11 Права доступа и ID пользователей и групп
11.1. Проверка прав доступа
11.1.1. Действительные и эффективные ID
11.1.2. Биты Setuid и Setgid
11.2. Получение ID пользователя и группы
11.4. Проверка для эффективного пользователя: euidaccess() (GLIBC)
11.5. Установка дополнительных битов доступа для каталогов
11.5.1. Группа по умолчанию для новых файлов и каталогов
11.6. Установка действительных и эффективных ID
11.6.1. Изменение набора групп
11.7. Работа со всеми тремя ID: getresuid() и setresuid() (Linux)
11.8. Пересечение минного поля безопасности: setuid root
11.10. Резюме
Упражнения
Глава 12 Общие библиотечные интерфейсы — часть 2
12.2.1. Заполнение памяти: memset()
12.3.3. Использование переменной окружения TMPDIR
12.4. Совершение самоубийства: abort()
12.6. Псевдослучайные числа
12.6.2. Функции POSIX: random() и srandom()
12.10. Резюме
Упражнения
Глава 13 Интернационализация и локализация
13.1. Введение
13.2.2. Установка локали: setlocale()
13.2.7. Форматирование значений даты и времени: ctime() и strftime()
13.3. Динамический перевод сообщений программ
13.3.1. Установка текстового домена: textdomain()
13.3.4. Упрощение использования gettext()
13.3.4.2. Только GLIBC: <libintl.h>
13.4. Не могли бы вы произнести это для меня по буквам?
13.4.1. Широкие символы
13.4.2. Представления многобайтных символов
13.4.4. Заключение
13.6. Резюме
Глава 14 Расширенные интерфейсы
14.1. Выделение выровненной памяти: posix_memalign() и memalign()
14.2. Блокировка файлов
14.2.1. Концепции блокировки файлов
14.2.2. Блокировка POSIX: fcntl() и lockf()
14.2.2.1. Описание блокировки
14.2.2.2. Установка и снятие блокировок
14.2.2.3. Предостережения по поводу блокировок
14.2.3. Блокирование BSD: flock()
14.3. Более точное время
14.3.1. Время в микросекундах: gettimeofday()
14.3.2. Файловое время в микросекундах: utimes()
14.4. Расширенный поиск с помощью двоичных деревьев
14.4.1. Введение в двоичные деревья
14.4.2. Функции управления деревьями
14.4.3. Ввод элемента в дерево: tsearch()
14.4.5. Обход дерева: twalk()
14.4.6. Удаление вершины дерева и удаление дерева: tdelete() и tdestroy()
14.5. Резюме
Глава 15 Отладка
15.1. Сначала главное
15.2. Компиляция для отладки
15.4. Программирование для отладки
15.4.1. Код отладки времени компилирования
15.4.2. Отлаживаемый код времени исполнения
15.4.2.3. Добавьте код журналирования
15.4.2.4. Файлы отладки времени исполнения
15.5. Отладочные инструменты
15.5.2. Отладчики выделения памяти
15.5.2.5. Другие отладчики malloc
15.5.3. Современная lint
15.6. Тестирование программ
15.7. Правила отладки
15.8. Рекомендуемая литература
15.9. Резюме
Упражнения
Глава 16 Проект, связывающий все воедино
16.2. Рекомендуемая литература
Приложение А Научитесь программированию за десять лет
Ссылки
Ответы
Сноски
Приложение В Лицензия Caldera для старой Unix[194]
Пример использования