[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