read() a select()(Was: Blokovani v fgets)
Michal Krause
mike na navrcholu.cz
Úterý Srpen 4 15:26:25 CEST 1998
Ted jsem s tim trosku laboroval a zjistil jsem, ze pokud je otevrena console a
ne soubor, funkce read() cte automaticky po radcich. Pokud bych ji donutil, aby
stejne fungovala i na FIFO, mel bych po problemu. Pujde to nejak?
Mam ale navic problemy se selectem. Prikladam programek, ktery funguje jak ma
pouze za predpokladu, ze stdin je nepresmerovan - tedy je to klavesnice. Pokud
se program spusti treba takhle: ./select <file, tak dojede na konec souboru a
funkce select() by mela program stopnout az do timeoutu, coz ale neudela. U
souboru je to pomerne logicke, ale u FIFO se da predpokladat, ze data budou
pribyvat, takze by mela blokovat. Nevi nekdo co s tim?
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
int main(void)
{
fd_set rfds;
struct timeval tv;
int retval, result;
char buf[1024];
while (1)
{
tv.tv_sec = 5;
tv.tv_usec = 0;
FD_ZERO(&rfds);
FD_SET(0, &rfds);
retval = select(1, &rfds, NULL, NULL, &tv);
if (retval)
{
bzero(buf, 1024);
result = read(fileno(stdin), buf, 1024);
if (result == 0)
continue;
printf("-%s", buf);
}
else
printf("Data timeout\n");
}
exit(0);
}
MK
/\
----------------------------------/ \----------------------------------
Michal Krause - 4WeB /\ / \ /\
mailto:mike na navrcholu.cz / \/ \/ \ Sluzba Na vrcholu
http://4web.navrcholu.cz/ / \ / \ http://www.navrcholu.cz/
ICQ:7665279 / \ / \
------------------------------------------------------------------------
Další informace o konferenci Linux