[P&AM Lab] Переделанный генератор паролей
Grigoriy A. Sitkarev
sitkarev на komitex.ru
Ср Фев 23 00:45:15 MSK 2011
С макросами что-то невообразимое намудрил. Есть такое правило -- макросы
они были придуманы не для того чтобы изменять синтаксис языка. И уж
конечно ни в коем случае макрос не должен делать return. Это только в
одном единственном случае допустимо и то потому что есть некая традиция
(при проверке валидности аргументов в начале вызова public функций).
Функция select_char() однозначно должна быть перепроектирована. Есть
ощущение что и интерфейс к другим функциям тоже нужно переделывать.
Честно говоря, мне с первого раза не понятно было что и зачем.
Куда-то опять пропали комментарии.
Не понятно почему теперь MAX_LENGTH+2 стало. Было же 255 байтов для
строки ещё плюс один байт для хранения нуль-терминатора. Оно конечно
будет работать, то сейчас это всё стало неуклюжим каким-то. И можно
сделать всё проще.
C poll() всё достаточно просто:
struct pollfd pfd;
int res;
pfd.fd = fileno(stdin);
pfd.events = POLLIN;
pfd.revents = 0;
/* 5 seconds timeout. */
res = poll(&pfd, 1, 5000);
if (res == 0) {
printf("timeout\n");
} else if (res == -1) {
if (errno == EINTR)
printf("got signal\n");
else
printf("error\n");
} else {
/* We have data to read from stdin. */
}
Проверишь на тестовой программе сначала, потом сообразишь как его
включить в твой код.
--
Г.А.
22.02.2011 18:28, Константин Никулов пишет:
> Я его переделал, вот код. Правда poll() вокруг open() еще не возвел, но это тоже будет скоро, когда пойму, как его возводить.
Подробная информация о списке рассылки Lab