[so] tema1 - erori ciudate
    Lucian Adrian Grijincu 
    lucian.grijincu at gmail.com
       
    Mon Jan 26 12:19:32 EET 2009
    
    
  
2009/1/26 Alexandru Goia <webaigoia at gmail.com>:
>           close(STDOUT_FILENO);
>           dup(fd_out);
Bucata asta e urâtă :(
dup() întoarce cel mai mic descriptor de fișier nefolosit la momentul apelului.
Bucata asta de cod face niște presupuneri care sunt valide în codul
tău, dar de care nu e nevoie:
* 0 - stdin; 1 - stdout; 2 - stderr
* 0 e folosit la citire și nu poate fi întors de dup()
* după ce ai închis STDOUT_FILENO 1 devine liber și va fi întors de dup().
dup2(fd_out, STDOUT_FILENO) nu mai face nici o presupunere. aici
închiderea lui stdout o face kernelul și ești sigur că dacă nu apar
erori, duplicarea se face pe descriptorul de fișier dorit.
În plus nu mai sunt posibile condițiile de cursă și codul e puțin mai
eficient (nu se fac două apeluri de sistem diferite, nu e nevoie să se
caute prin tabela de descriptori primul liber, etc.)
-- 
 .
..: Lucian
    
    
More information about the so
mailing list