LINUX.ORG.RU

Почему? Вопрос по select.


0

0
FILE *infile;

int int_file; int_file=open("/var/log/squid/access.log",O_RDONLY);

infile=fdopen(int_file,"r");

fd_set rfds;

struct timeval tv;

int retval;

FD_ZERO(&rfds);

FD_SET(int_file,&rfds);

tv.tv_sec=40;

tv.tv_usec=100;

retval=select(1,&rfds,NULL,NULL,&tv);

...

Почему select не реагирует на изменение access.log

anonymous
Так эть на простых файлах select() на возможность read должен регаировать по любому, то есть read() на обычном файле не заблокируется никогда.
Dead ★★★★
()
Ответ на: комментарий от lg
Кстати да, типичная ошибка с первым параметром select :-)
Dead ★★★★
()
А что значит "20" в первом параметре? Можно по подробнее пожалуйста.
anonymous
()
Ответ на: комментарий от anonymous
из man select
.......
n на единицу больше самого большого номера дескриптора из всех наборов
.......

а 20 это lg для примера написал IMHO :-)
Dead ★★★★
()
Ответ на: комментарий от anonymous
Да нет же
просто нужно было делать
select(int_file+1,...

P.S. сомнения по поводу того что это будет работать с обчными файлами остаются
Dead ★★★★
()
Ответ на: комментарий от anonymous
>>То есть - FD_SET(int_file+1,...? <- >>Эффект тот же. :(

Sorry.Облажался.

С обычными файлами действительно не работает.

Ткните пожалуста носом на ссылку с исходниками tail! Очень нужно.

anonymous
()
Классическая ошибка с первым параметром в сочетании с классической попыткой натравить select на файл - вдвойне классика. Каждый на эти грабли наступает, я то же по ним ходил ;)

Зачем тебе исходники tail? strace на него напусти и сам все увидишь. sleep + read помогут в большинстве случаев.

anonymous
()
Ответ на: комментарий от Dead
select и poll работают с любыми дескрипторами, с файлами, сокетами... Не работают только с дескрипторами, которые связаны с очердями сообщений и т. п. Вот.
OxiD ★★★★
()
Ответ на: комментарий от OxiD
>select и poll работают с любыми дескрипторами, с файлами, сокетами... Не работают только с дескрипторами, которые связаны с очердями сообщений и т. п. Вот.

А в чем я был не прав?
Или ты хочешь попробовать отследить изменения в файле с помощью select() ? ;-)
Dead ★★★★
()
Ответ на: комментарий от Dead
>>А в чем я был не прав? Или ты хочешь попробовать отследить изменения в файле с помощью select() ? ;-)

Да именно это и нужно.И если появились новые данные их нужно считать.

Попробую read + sleep.

P.S. За ссылку спасибо.

anonymous
()
Ответ на: комментарий от anonymous
Вы лучше людям объясните толком почему не пашет select именно на файловых дескрипторах )

Кратко, для этого нужно знать как работает FS.
А работает она очень интересно особено со своим кешем...
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.