рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Обработка ошибок в системных вызовах

Обработка ошибок в системных вызовах - раздел Программирование, Разработка программ на языке C/C++ в ОС Linux Большинство Системных Вызовов Возвращает Ноль, Если Операция Выполнена Успешн...

Большинство системных вызовов возвращает ноль, если операция выполнена успешно, и ненулевое значение в противном случае. В случае ошибок в глобальную переменную errno записывается дополнительная информация - целое число, идентифицирующее причину ошибки. Если включить в программу <errno.h>, можно ссылаться на ошибки по их символических именам, например, EACCES или EINVAL.

Получить в программе текстовое сообщение об ошибке можно двумя способами:

1) При помощи функции strerror из <string.h>; функция принимает errno и возвращает строку с описанием ошибки.

2) При помощи функции perror из <stdio.h>; функция принимает строку, которую она выводит в качестве префикса перед сообщением об ошибке (например, это может быть имя файла, где произошла ошибка) и выводит описание ошибки в поток stderr.

Пример. В программе делается попытка открыть файл. Системный вызов open возвращает дескриптор файла или -1 в случае ошибки.

Вариант 1. fd = open ("inputfile.txt", O_RDONLY);

if (fd == -1) {

fprintf (stderr, "error opening file: %sn", strerror (errno));

exit (1);

}

Вариант 2. fd = open ("inputfile.txt", O_RDONLY);

if (fd == -1) {

perror("inputfile.txt");

exit (1);

}

 

Обратите внимание, что успешное выполнение системного вызова не приводит к сбросу переменной errno.

 

Задание 6. Модифицируйте приведенную ниже программу copyfile.c копирования файла, добавив в нее комментарии, проверку количества аргументов командной строки (при неверном количестве параметров установите код возврата=1) и обработку ошибок после системных вызовов open (коды возврата 2 и 3), write (код возврата 4). Протестируйте программу для разных ситуаций.

 

#include <sys/stat.h>

#include <fcntl.h>

#include <stdio.h>

#define BUF_SIZE 256

int main (int argc, char *argv [])

{

int input_fd, output_fd;

int bytes_in, bytes_out;

char rec [BUF_SIZE];

input_fd = open (argv [1], O_RDONLY); /* Здесь код возврата=2 */

output_fd = open (argv [2], O_WRONLY | O_CREAT, 0666); /*Код возврата=3 */

while ((bytes_in = read (input_fd, &rec, BUF_SIZE)) > 0) {

bytes_out = write (output_fd, &rec, bytes_in);

/* Здесь код возврата=4, если число прочитанных байтов не равно числу записанных*/

close (input_fd);

close (output_fd);

return 0;

}

– Конец работы –

Эта тема принадлежит разделу:

Разработка программ на языке C/C++ в ОС Linux

На сайте allrefs.net читайте: "Разработка программ на языке C/C++ в ОС Linux"

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Обработка ошибок в системных вызовах

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Последовательность команд для создания программы.
1. Программа состоит из одного исходного файла 1) В текстовом редакторе (pico, vi, gedit, emacs и т.п.) создать и сохранить исходный текстовый файл (например, myprog.

Использование утилиты Make
Утилита Make используется для автоматизации разработки программ. Для этого в текстовом файле с именем makefile указывается следующая информация: - целевые

Доступ к параметрам командной строки
При запуске программы в командной строке после имени программы могут указываться параметры, называемые параметрами(аргументами)командной строки. О

Переменные окружения
Любая исполняемая программа имеет свое окружение, представляющее собой набор строковых пар вида переменная=значение. В соответствии с соглашением имена переменных пишутся заглавными буквами. Доступ

Вопросы
1. Как получить промежуточный (после препроцессора) исходный текст программы? 2. Как создать программу из нескольких модулей? 3. Как добавить в программу библиотеку объектных моду

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги