[P&AM Lab] Fwd: Re: Переделанный генератор паролей

Константин Никулов nateford на inbox.ru
Ср Фев 23 09:37:19 MSK 2011


Знаю, самому макросы не нравятся. Но без них читаться неудобно будет, а как по другому сделать, придумать не получается. Только через switch если, но там 94 раза case будет тогда, что громоздко и тоже не очень удобно.

Интерфейс к другим функциям можно сильно упростить, если ввести short int flags[4] вместо отдельных пременных. Но тогда опять же понятность может пострадать.

С MAX_LENGTH я запутался немного, если честно... Но этот вариант работал, поэтому я его оставил.

Tue, 22 Feb 2011 23:45:15 +0300 письмо от "Grigoriy A. Sitkarev" <sitkarev на komitex.ru>:

> С макросами что-то невообразимое намудрил. Есть такое правило -- макросы 
> они были придуманы не для того чтобы изменять синтаксис языка. И уж 
> конечно ни в коем случае макрос не должен делать 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