ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Системные вызовы и библиотека libc.ЛАБОРАТОРНАЯ РАБОТА № 1. ВВЕДЕНИЕ В ОС UNIX. РАБОТА С ФАЙЛОВОЙ СИСТЕМОЙ Системные вызовы и библиотека libc. Основной постоянно функционирующей частью операционной системы UNIX является ее ядро. Другие программы (будь то системные программы или пользовательские) могут общаться с ядром посредством системных вызовов, которые по сути дела являются прямыми точками входа программ в ядро. При исполнении системного вызова программа пользователя временно переходит в привилегированный режим, получая доступ к данным или устройствам, которые не доступны при работе в режиме пользователя. Реальные машинные команды, которые требуются для активизации системных вызовов, естественно, отличаются от машины к машине, наряду со способом передачи параметров и результатов между вызывающей программой и ядром. Однако с точки зрения программиста на языке С использование системных вызовов ничем внешне не отличается от использования других функций стандартной ANSI библиотеки языка С, таких как, например, функции работы со строками strlen(), strcpy() и т.д. Стандартная библиотека в UNIX - libc - обеспечивает C интерфейс к каждому системному вызову. Это приводит к тому, что системный вызов выглядит как функция на языке С для программиста. Более того, многие из уже известных вам стандартных функций, например, функции для работы с файлами: fopen(), fread(), fwrite() при реализации в операционной системе UNIX при своей работе будут применять различные системные вызовы. По ходу нашего курса нам придется ознакомиться с большим количеством разнообразных системных вызовов и их C-интерфейсами. Большинство системных вызовов, возвращающих целое значение, использует значение -1 при возникновении ошибки и значение большее или равное 0 при нормальном завершении. Системные вызовы, возвращающие указатели, обычно для идентификации ошибочной ситуации пользуются значением NULL. Для точного определения причины ошибки C-интерфейс предоставляет глобальную переменную errno, описанную в файле <errno.h> вместе с ее возможными значениями и их краткими определениями. Заметим, что анализировать значение переменной errno необходимо сразу после возникновения ошибочной ситуации, так как успешно завершившиеся системные вызовы не изменяют ее значения. Для получения символьной информации об ошибке на стандартном выводе программы для ошибок (по умолчанию экран вашего терминала) может применяться стандартная UNIX функция perror(). Не нашли, что искали? Воспользуйтесь поиском:
|