View Full Version : read, come renderla non bloccante?
Abdujaparov
16-04-2006, 21:07
Salve a tutti, come faccio a fare una read non bloccante da una pipe senza nome
int pipeS[2];
pipe(pipeS);
read(pipeS[0], intero, sizeof(intero)); //come faccio a fare questa read non bloccante?
Grazie a tutti, ciao ciao.
Salve a tutti, come faccio a fare una read non bloccante da una pipe senza nome
int pipeS[2];
pipe(pipeS);
read(pipeS[0], intero, sizeof(intero)); //come faccio a fare questa read non bloccante?
Grazie a tutti, ciao ciao.Devi usare la funzione select. La select serve per attendere il cambiamento di stato di uno o più descrittori di file. Gli puoi passare anche un valore di timeout, che può essere eventualmente anche zero (utile quindi per fare del polling).
Abdujaparov
17-04-2006, 07:42
Posso usare la select su un solo file descriptor?
Come dovrei usarla?
Se non ricordo male dovrei creare un readset, prima inizializzarlo a zero, poi inserire pipeS[0].
A questo punto:
Select(pipeS[0]+1,readset, NULL, NULL); //fino a qui è giusto?
poi if(FD_ISSET(pipeS[0], readset)//è giusto questo per verificare se è attivo?
Se si faccio operazioni e mi pare di dover reinserire pipeS[0] nel readset, ricordo bene?
Grazie, ciao ciao.
Posso usare la select su un solo file descriptor?
Come dovrei usarla?Dovrebbe essere una cosa del genere:
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
...
int r;
fd_set fds;
struct timeval tv;
/* Timeout=0 --> select non bloccante, ritorna immediatamente */
tv.tv_sec = 0;
tv.tv_usec = 0;
FD_ZERO (&fds);
FD_SET (tuo_descrittore, &fds);
r = select (tuo_descrittore+1, &fds, NULL, NULL, &tv);
if (r == 1)
{
/* Fai la read perche' ci sono dei dati */
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.