[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] C rutine til exec + pipe til og fra



On Tue, 18 May 2004 14:52:26 +0200, Hans-Christian Stadler wrote:
> Glemte at sætte pipe'sene i O_NONBLOCK mode (og teste på EAGAIN).

Husk at når du sætter O_NONBLOCK på den ene ende af pipen, kommer det
også til at gælde for den anden ende, dvs. at det program du ikke selv
har skrevet risikerer at modtage EAGAIN på writes og reads, og hvis det
ikke forventer dette, kan der opstå fejl. Det er ikke noget problem med
standard GNU tools, det er mere hvis du kører noget mere eksotisk
hjemmebiks som din command.

Jeg tager måske fejl omkring ovenstående, men jeg synes bare jeg engang
oplevede det med nogle perl scripts hvor jeg satte O_NONBLOCK på en named
pipe.

> Nedenstående virker med simultan input/output/output på 10^6 bytes hver.

Det ser i det store og hele godt ud.

Jeg forstår ikke hvorfor du skriver
  while(close(fd));
Hvad er det for en fejlbetingelse der kan løses ved at busy-wait'e indtil
det lykkes, og hvorfor er det vigtigere at lukke filen korrekt i alle
tilfælde end at undgå uendelige loops i alle tilfælde?

Jeg synes også det er mere oplagt at bruge
  execl("/bin/sh", "sh", "-c", command);
  exit(-1); /* udføres kun hvis /bin/sh ikke kan køres */
end
  exit(system(command));
system() funktionen laver en fork,exec,wait bag din ryg, hvilket jo i
dette tilfælde er overflødigt.

Og det er selvfølgelig "bare" proof-of-concept kode, men statisk
allokerede buffere til at holde outputtet af en kommando der kan generere
tonsvis af data er nok ikke vejen frem på en platform med begrænset RAM.



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 22:43 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *