Программирование для Linux. Профессиональный подход
Шрифт:
Сбои системных вызовов происходят в самых разных ситуациях.
■ В системе могут закончиться ресурсы (или же программа может исчерпать лимит ресурсов, наложенный на нее системой). Например, программа может запросить слишком много памяти, записать чересчур большой объем данных на диск или открыть чрезмерное количество файлов одновременно.
■ Операционная система Linux блокирует некоторые системные вызовы, когда программа пытается выполнить операцию при отсутствии должных привилегий. Например, программа может попытаться осуществить запись в доступный только для чтения файл, обратиться к памяти другого процесса или уничтожить программу другого пользователя.
■ Аргументы системного
■ Системный вызов может аварийно завершиться по причинам, не зависящим от самой программы. Чаще всего это происходит при доступе к аппаратным устройствам. Устройство может работать некорректно или не поддерживать требуемую операцию. либо в дисковод просто не вставлен диск.
■ Выполнение системного вызова иногда прерывается внешними событиями, к каковым относится, например, получение сигнала. Это не обязательно означает ошибку, но ответственность за перезапуск системного вызова возлагается на программу.
В хорошо написанной программе, часто обращающейся к системным вызовам, большая часть кода посвящена обнаружению и обработке ошибок, а не решению основной задачи.
2.2.3. Коды ошибок системных вызовов
Большинство системных вызовов возвращает 0, если операция выполнена успешно, и ненулевое значение — в случае сбоя. (В некоторых случаях используются другие соглашения. Например, функция
Практически все системные вызовы сохраняют в специальной переменной
Коды ошибок являются целыми числами. Возможные значения задаются макроконстантами препроцессора, которые, по существующему соглашению, записываются прописными буквами и начинаются с литеры "E", например
7
В целях обеспечения безопасной работы потоков переменная
В Linux имеется удобная функция
Есть также функция
В следующем фрагменте программы делается попытка открыть файл. Если это не получается, выводится сообщение об ошибке и программа завершает свою работу. Обратите внимание на то, что в случае успеха операции функция
В зависимости от особенностей программы и используемого системного вызова конкретные действия, предпринимаемые в случае ошибки, могут быть разными: вывод сообщения об ошибке, отмена операции, аварийное завершение программы, повторная попытка и даже игнорирование ошибки. Тем не менее важно включить в программу код, обрабатывающий все возможные варианты ошибок.
Одни из кодов, с которым приходится сталкиваться наиболее часто, особенно в функциях ввода-вывода, — это
Ниже приведен фрагмент программы, в котором функция
Русская мафия 1991–2014. Новейшая история бандитской России
Энциклопедия криминала
Документальная литература:
прочая документальная литература
рейтинг книги
Статьи
Религия и эзотерика:
православие
христианство
религия
рейтинг книги
Первый Предтеча. Трилогия
Первый Предтеча
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
рейтинг книги
Немецкие танки в бою
1. Танки в бою
Документальная литература:
прочая документальная литература
рейтинг книги
Место под солнцем
Анника Бенгтзон
Детективы:
криминальные детективы
рейтинг книги
Газлайтер. Том 17
17. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
История государства и права зарубежных стран. Шпаргалки
1. Зачет
Научно-образовательная:
история
юриспруденция
рейтинг книги
Политология: учебник для студентов вузов
Научно-образовательная:
политика
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 33
33. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
На пороге «оранжевой» революции
Научно-образовательная:
политика
рейтинг книги