[P&AM Lab] генератор паролей

Grigoriy A. Sitkarev sitkarev на komitex.ru
Вт Фев 15 21:09:12 MSK 2011


В man-е написано:

gets() and fgets() return s on success, and NULL on error or when end of 
file occurs while no characters have been read.

Нужна проверка на NULL, обязательно.

Откуда берутся ошибки? Считается что это очевидно тем кто пользуется 
функциями буферизованного ввода-вывода, т.к. они по сути лишь обёртки 
над низкоуровневым вводом/выводом. А это значит что всё что может 
случиться с read(2), write(2) может случиться и с fgets(3). За одной 
только разницей что в случае с fgets(3) нам уже не важно по какой 
причине -- или была ошибка или не было. Если это был сигнал, то errno 
будет соответствующим образом установлено и всё.

Лучше показать на примере. Скомпилируйте и запустите вот эту программу 
из вложения а потом проведите такой эксперимент:

1. вместо ввода строки нажмите Ctrl+D;
2. пошлите процессу сигнал SIGUSR1.

И станет понятно, откуда там ошибки. По итогу станет ясно что проверять 
что вернул fgets(3) нужно обязательно.

--
Г.А.

15.02.2011 19:38, Константин Никулов пишет:
> Тут есть проверка на ошибку у fgets. А какие у него ошибки-то могут быть? В мане не написано.


----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: stdioerr.c
Type: text/x-csrc
Size: 733 bytes
Desc: отсутствует
URL: <http://amplab.syktsu.ru/pipermail/lab/attachments/20110215/12579ac9/attachment.c>


Подробная информация о списке рассылки Lab