|
| pipes of file descriptor Fra : Digger |
Dato : 18-08-01 00:14 |
|
Hej igen.
Når jeg nu har redireceted stdio ved hjælp af pipes, er det så muligt,
at undersøge om en file descriptor,
har modtaget noget. Problemet er nemlig, at den anden process nogle
gange sender tekst uden brug af EOF,
hvilket vil sige, at det først bliver vist når jeg har udført en read()
i forbindelse med noget andet.
Her er et lille udsnit af koden.
-----------------------------------
for(;;){
gets(com);
strcat(com,"\n");
write(pd[1], com, strlen(com));
i = read(pi[0],stin,4096);
stin[i] ='\0';
printf("%i\n%s",i,stin);
}
------------------------------------
Jeg ville gerne kunne undersøg, om der bliver skrevet noget til pi[0] og
derefter udskrive det uden at
der altid skal skrives noget først.
Hvis der er nogle der har nogle forslag tager jeg gerne mod dem.
På forhånd mange tak
Dennis
| |
Jakob Stoklund Olese~ (18-08-2001)
| Kommentar Fra : Jakob Stoklund Olese~ |
Dato : 18-08-01 15:20 |
|
Digger <digger1@mail.tele.dk> writes:
> Hej igen.
>
> Når jeg nu har redireceted stdio ved hjælp af pipes, er det så muligt,
> at undersøge om en file descriptor,
> har modtaget noget. Problemet er nemlig, at den anden process nogle
> gange sender tekst uden brug af EOF,
> hvilket vil sige, at det først bliver vist når jeg har udført en read()
> i forbindelse med noget andet.
Brug fcntl() til at sætte O_NONBLOCK flaget paa din fildescriptor. Saa
vil read() altid returnere med det samme. Hvis der ikke er nogen data,
returnerer den -1 med errno sat til EAGAIN. (Returværdien 0 betyder
stadig EOF)
Se ogsaa select(), hvis du vil vente paa, at der kommer data paa en af
amnge descriptors.
/stoklund
[hvordan overbeviser man xemacs om, at <compose> <a> <a> betyder å, og
ikke @?]
| |
|
|