[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 Wed, 19 May 2004 11:09:17 +0200, Hans-Christian Stadler wrote:

>> 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
> Jeg mener at O_NONBLOCK er en egenskab af en fildeskriptor. Hver process
> har sine egne fildeskriptorer. Har du et eksempel på, at det ikke forholder
> sig sådan? Kan det være, at du har sat O_NONBLOCK før fork() - så kunne man
> måske få den opførsel, du mener at have oplevet.

Jeg kan ikke umiddelbart reproducere det, så jeg husker nok forkert.

Men mht. delte af file descriptors over fork() vil de dog så vidt jeg
ved dele alle flag undtagen close-on-exec flaget. Se fcntl(2): "The flags
are shared between copies (made with dup(2), fork(2), etc.) of the same
file descriptor)".

>> 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?
> Modtagne signaler kan få close() til at fejle, og her vil retry løse
> problemet. I andre fejlsituationer har jeg bare valgt at gøre det samme,
> hvilket kan være ok for nogle programmer og skidt for andre.

Så skal du vel bare skrive
  while (close(fd) && errno == EINTR);

> Dør processen snart efter, rydder kernen op, og man behøver ikke at
> lukke fildeskriptorer under alle omstændigheder. Husk, at ulukkede
> fildeskriptorer er fejl i samme klasse som memory leaks.

Præcis, nemlig i den klasse af fejl som brugeren aldrig opdager med
mindre vi snakker om en long-running daemon. Derimod opdager brugeren med
sikkerhed et uendeligt loop.

Mvh. Jonas



 
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] *