- •Введение
- •Глава 1. Фундаментальные концепции unix Систем
- •Программы, процессы и потоки
- •Сигналы
- •Идентификаторы процессов, группы процессов и сеансы
- •Система прав
- •Другие атрибуты процесса
- •Межпроцессное взаимодействие
- •Использование системных вызовов
- •Краткие описания функций и обработка ошибок
- •Контрольные вопросы
- •Литература
- •Глава 2. Базовые операции ввода-вывода
- •Файловые операции ввода - вывода
- •Стандартные дескрипторы
- •Системные вызовы open и creat
- •Системный вызов umask
- •Системный вызов unlink
- •Текущая позиция в файле
- •Системный вызов write
- •2.8. Системный вызов read
- •2.9. Системный вызов close
- •2.10. Системный вызов lseek
- •2.11. Системные вызовы pread и pwrite
- •2.12. Системные вызовы truncate и ftruncate
- •Контрольные вопросы
- •Литература
- •Глава 3. Дополнительные операции файлового ввода_вывода
- •Низкоуровневый доступ к файловой системе
- •Жесткие и символические ссылки
- •Системный вызов getcwd
- •Отображение метаданных файла
- •Системные вызовы getpwuid, getgrgid и getlogin
- •Каталоги
- •Системные вызовы chdir и fchdir
- •Системные вызовы mkdir и rmdir
- •Контрольные вопросы
- •Литература
- •Глава 4. Процессы и потоки
- •4.1. Среда окружения
- •Системный вызов exec
- •Системный вызов fork
- •Завершение процесса и системные вызовы exit
- •Системные вызовы wait, waitpid и waitid
- •Получение и изменение идентификаторов пользователя и группы
- •Получение и изменение приоритета
- •Контрольные вопросы
- •Литература
- •Глава 5. Механизмы межпроцессного взаимодействия
- •5.1. Каналы
- •5.2. Системные вызовы dup и dup2
- •5.3. Двунаправленное взаимодействие с использованием однонаправленных каналов
- •Контрольные вопросы
- •Литература
- •Глава 6.Механизмы взаимодействия процессов
- •Именованные каналы (fifo)
- •Системные вызовы для работы с очередями сообщений posix
- •Семафоры
- •Системные вызовы для работы с общей памятью posix
- •Контрольные вопросы
- •Литература
- •Глава 7.Сетевое взаимодействие и сокеты
- •Основные системные вызовы для работы с сокетами, образующими логические соединения
- •Обслуживание нескольких клиентов
- •Адресация сокетов
- •In_port_t sin_port; /* номер порта (uint16_t) */
- •In_addr_t s_addr; /* адрес iPv4 (uint32_t) */
- •Домен адресов af_inet6
- •In_port_t sin6_port; /* номер порта (uint16_t) */
- •Доменная система именования
- •Параметры сокетов
- •Контрольные вопросы
- •Литература
- •Глава 8.Сигналы и таймеры
- •Введение в сигналы
- •Жизненный цикл сигналов
- •Типы сигналов
- •Системный вызов sigaction
- •Контрольные вопросы
- •Литература
- •Заключение
- •Список литературы
- •Глава 2. Базовые операции ввода-вывода 14
- •Глава 3. Дополнительные операции файлового ввода_вывода 25
- •Глава 6. Механизмы взаимодействия процессов 58
Контрольные вопросы
Напишите программу, которая вызывает появление сигнала SIGPIPE, когда производится обращение к системному вызову write. Затем заставьте программу игнорировать сигнал SIGPIPE и посмотрите, что возвращает write в этом случае.
Реализуйте системный вызов pause в терминах sigwait и любого другого системного вызова, какой только захотите.
Реализуйте системный вызов signal с помощью sigaction.
Реализуйте системный вызов sigset с помощью sigaction.
Реализуйте команду, которая принимает в качестве аргументов время и текст сообщения, а по достижении заданного времени выводит на устройство стандартного вывода и подает звуковой сигнал.
Литература
Глас Г., Эйблс К. Unix для программистов и пользователей. / Г. Глас, К. Эйблс. – СПб.: БХВ-Петербург, 2004. – 848 с.: ил.
Брюс М. Unix/Linux: Теория и практика программирования. / М.Брюс. - Издательство "Кудиц-Образ", 2004. -576 с.
Собель М.Г. Linux. Администрирование и системное программирование. / М.Г. Собель. - Издательство: Питер, 2011. – 880 с.
Иванов Н. Программирование в Linux. Самоучитель. / Н. Иванов. - Издательство: БХВ-Петербург, 2012. – 400 с.
Заключение
Рассмотренные в учебном пособии системные вызовы полезны, конечно, не только для чисто теоретического изучения, но и для решения многих практических задач.
Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки.
Дано введение в сетевое программирование с информацией, которой не часто уделяется внимание в стандартных учебниках. Чтобы получить удовольствие от книги, необходимы определенные начальные знания, где и как их получить - рассказано в книге. Все программы для учебного пособия созданы под операционную систему Linux на языке Си.
В пособии рассмотрены фундаментальные основы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие.
Пособие главным образом ориентировано на практическое применение изложенных концепций. В ней есть все, что нужно начинающим, а углубленное изучение каждой темы делает ее ценной и для опытных программистов. Каждая тема проиллюстрирована большим числом примеров на языке программирования С, которые читатель сможет использовать в качестве образцов для собственных программ.
В пособии намеренно не включен ряд разделов, которые достаточно подробно изложены в других учебных пособиях по системному программированию. Поэтому при изучении дисциплины «Системное программирование» желательно использовать данное учебное пособие в комплексе с другими пособиями, включенными в список рекомендуемой литературы.
Предлагаемое учебное пособие ориентировано, прежде всего, на студентов, обучающихся по направлениям: «Фундаментальная информатика и информационные технологии», «Информационные системы и технологии», «Бизнес информатика», но может быть полезным и для студентов других направлений.