Обробка помилок – errno

Системні виклики, описані в цьому розділі, а фактично всі системні виклики, можуть завершуватися з помилками Зазвичай вони повідомляють про це, повертаючи значення -1 Іноді буває корисно знати, яка саме помилка сталася з цією метою всі системні виклики, коли це доречно, залишають номер помилки у зовнішній змінної errno (Значення різних номерів помилок наведені у введенні розділу 2 керівництва по UNIX для програміста) Користуючись errno, програма може, наприклад, визначити, викликана помилка відкриття фай ла його відсутністю або ж відсутністю прав доступу до нього у користувача Для перетворення номерів у текстові повідомлення існує масив рядків sys_errlist, індексом в якому служать значення errno1

Наша версія функції error використовує ці структури даних:

error (s1, s2) / * вивести повідомлення про помилку і закінчити роботу * / char * s1, * s2

{

extern int errno, sys_nerr

extern char  *sys_errlist[],  *progname

if (progname)

fprintf(stderr,  &quot%s:  &quot,  progname) fprintf(stderr,  s1,  s2)

if (errno  &gt 0 &amp&amp   errno &lt sys_nerr)

fprintf(stderr,  &quot  (%s)&quot,  sys_errlist[errno]) fprintf(stderr, &quot\n&quot)

exit(1)

}

Значення errno инициализируется нулем і не повинно перевищувати sys_nerr При відсутності помилок errno НЕ обнуляється, отже, користувач повинен робити це самостійно, якщо програма продовжує роботу після виникнення помилки

1 У сучасних реалізаціях мінлива sys_errlist оголошена в stdioh як константних покажчик, тому слід виключити запропоноване нижче оголошення sys_errlist, так як його присутність в тексті програми буде викликати помилку компіляції через невідповідність типів в оголошеннях sys_errlist, отриманих з stdioh і з тексту програми – Прямуючи науч ред

Ось як виглядають повідомлення про помилки в даній версії cp:

$ cp foo  bar

cp:  cant open foo  (No such  file  or  directory)

$ date> foo chmod 0 foo Створено файл із забороною на читання

$ cp foo  bar

cp:  cant open foo  (Permission denied)

$

Джерело: Керниган Б, Пайк Р, UNIX Програмне оточення – Пер з англ – СПб: Символ-Плюс, 2003 – 416 с, Мул

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*