select() problem/feature
Quoted 109 lines · Nikola
Hi all,
i am writing small daemon.....and when i was seeing the end ......that was just the beginning of my problems.
General idea was to monitor list of files that was given on start.
For this example i am using test1.txt and test2.txt because I've succeeded to replicate my problem ,at least i think so....:)))))
so the files are....
test1.txt
-----8<-----8<-----8<-----8<-----8<-----8<-----8<
Testing from test1
-----8<-----8<-----8<-----8<-----8<-----8<-----8<test2.txt
-----8<-----8<-----8<-----8<-----8<-----8<-----8<
Testing from test1
-----8<-----8<-----8<-----8<-----8<-----8<-----8<and
daemon.cNow the problem is following:
when i compile (gcc
daemon.c=> a.out) and run binary in this version all works fine....and if I do
#echo "some new line" >> test1.txti would see on my screen that select figured it out and i am having new data for processing and it would print it out.
but when i uncomment last fprintf my while and select goes ballistic.....it prints numbers forever...not blocking......
So why is that this line "
fprintf(stderr,"%d\n",i++);" causes this behavior.tnx for help.
------------------------------------------------------------------------
#include <
sys/types.h>
#include <sys/stat.h>
#include <sys/select.h>
#include <stdio.h>
#include <stdlib.h>int main(void) {
FILE *fp1,*fp2; fd_set fdst; char buffer[100]; int i; if((fp1 = fopen("test1.txt","r")) == NULL){ return 0; } if((fp2 = fopen("test2.txt","r")) == NULL){ return 0; } /* Daemon-specific initialization goes here */ /* The Big Loop */ while (1) { /* Do some task here ... */ FD_ZERO(&fdst); FD_SET(fileno(fp1),&fdst); FD_SET(fileno(fp2),&fdst); select(fileno(fp2)+1,&fdst,NULL,NULL,NULL); if(FD_ISSET(fileno(fp1),&fdst)){ while(fgets(buffer,100,fp1) != NULL){ puts(buffer); } } if(FD_ISSET(fileno(fp2),&fdst)){ while(fgets(buffer,100,fp2) != NULL){ puts(buffer); } } //fprintf(stderr,"%d\n",i++); } exit(EXIT_SUCCESS); }
Quoted 3 lines
------------------------------------------------------------------------
1st: you can not use select on fd-s opened on regular files; use aio for async. I/O;
2nd: leave the comment on. check the CPU - if I'm not mistaking, the while(1){} goes nuts with or without fprintf();
M.D.
Signature · 2 lines
This message was scanned for spam and viruses by BitDefender. For more information please visit http://www.bitdefender.com/