open a errno

Stepan Roh stepan na srnet.cz
Středa Srpen 29 11:47:16 CEST 2001



On Wed, 29 Aug 2001, Robert Vojta wrote:

> > errno se nastavuje jenom pri chybe, kdyz chyba nenastane, tak se v nem
> > zachova puvodni hodnota. Takze je treba errno vynulovat predem. Pozor na
> > to, ze kazde vlakno ma vlastni errno, takze je treba ho vynulovat v kazdem
> > vlakne zvlast. Viz man errno(3):
>
>   Proc by jste mel to errno nulovat? To je uplne zbytecne, spravny postup ...
>
>   int fd;
>
>   if ((fd = open("file", O_RDWR)) == -1)
>   {
>     // ted se muzete podivat do errno
>     return;
>   }
>
>
>   Kdyz ho totiz budete nulovat a kontrolovat potom jenom errno, tak se Vam
> muze stat, ze jednou zapomenete errno zkontrolovat, pak ho zkontrolujete
> u jine funkce, ktera probehla OK a kdyz to errno bude nastavene z te predchozi
> funkce budete si myslet, ze chyba je uplne nekde jinde ... Priklad co myslim...
>
>   int fd1, fd2;
>
>   errno = 0;
>   fd1 = open("file1", O_RDWR);
>   fd2 = open("file2", O_RDWR);
>   if (errno)
>   {
>     // tak tady nevite cim to je a ty open nemusi byt za sebou, muze to
>     // byt od sebe na hony vzdalene a jakmile jenom jednou zapomenete
>     // tak uz jste v ...
>   }

To by samozrejme bylo:

errno=0
open
if (errno)
errno=0
open
if (errno)

Ja bych samozrejme testoval navratovou hodnotu fce open(), jenze jsem
reagoval na dotaz, ktery pouzival test na errno, tak jsem upozornil, ze mu
to nebude fungovat, kdyz si ho nevynuluje.

S pozdravem,

Stepan Roh



Další informace o konferenci Linux