[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