Странное поведение select(2), nd, 20-Янв-02, 18:10 [смотреть все]select(2) не работает в коде типа этого: ... char buf[256]; int len; fd_set set; int f=open("test", O_RDONLY); if(f==-1) { perror("test"); exit(1); } while(1) { FD_ZERO(&set); FD_SET(f, &set); if(select(f+1, &set, NULL, NULL, NULL)==1) { if((len=read(f, buf, 256))!=0) write(1, buf, len); else { printf("select()=1, but read()=0!\n"); fflush(stdout); } } else printf("select()!=1\n"); } ...В результате выполнения программа выдаёт сначала содержимое файла test (как и должно быть), а вот потом начинает выдавать "select()=1, but read()=0!", причем постоянно и без пауз, т.е. select(2) возвращает '1' сразу, хотя читать и нечего. Что я не так делаю!? Замумукался уже!
|
- RE: Странное поведение select(2), Soldier, 11:09 , 21-Янв-02 (1)
- RE: Странное поведение select(2), Soldier, 11:09 , 21-Янв-02 (2)
- RE: Странное поведение select(2), nd, 00:40 , 23-Янв-02 (3)
Небольшое дополнение. Я не сказал для чего мне это всё было нужно, так вот требуется выводить (с некоторой обработкой) растущий файл. Типа как tail -f это делает. Только tail (по крайней мере GNU'тый, исходниками которого я располагаю) делает так: читает из файла конец, если ничего не прочиталось - делает sleep() и всё поновой. Мне показалось это не совсем красиво, в связи с чем и хотелось использовать select(). А может select с обычными файлами вообще нельзя использовать?
|