Поискав "select" в форумах, не нашел чего-то вразумительного...
Потому вопрос: есть два файла, которые необходимо отслеживать. Отслеживать обращение к ним на запись. Приблизительно( по памяти), выглядит так:
int main( int c, char **v ) {
//arg check.. skp
int fd1 = open(v[1], O_RDONLY | O_NONBLOCK ), fd2open(v[2], O_RDONLY | O_NONBLOCK);
//fd open check skp
fd_set readfs;
timeval tv = { 10, 0 };
int ret = 0;
while( 1 ) {
FD_ZERO( &readfs );
FD_SET( fd1, &readfs );
FD_SET( fd2, &readfs );
ret = select( ( fd1 > fd2 ? fd1 : fd2 ) + 1, &readfs, 0, 0, &tv );
if (ret ) {
if( FD_ISSET( fd1, &readfs ) ) //always willb here
if( FD_ISSET( fd2, &readfs ) ) //always willb here
}
Может по коду и напутал чего, но это не принципиально. Когда отдавать ему пустой файл - он сработает. Когда отдать полный - он сработает. Он(select)- всегда сработает, несмотря ни на что. Да что там readfs! Если ему дать writefs с установленными битами дескрипторов - он также будет срабатывать! Вообще, не радоваться, нет повода. Может я чего-то недогоняю... Всегда валидно работало, а с файлами такая-вот "беда".
ps. Текущая реализация этой задачи, работает через PF_UNIX сокеты, но это же не выход, да ? :)
ps. try it in google "man open" :)