[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