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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.