<div dir="ltr">Buenas lista,<div><br></div><div style>Estoy haciendo un programita simple pero me estoy encontrando con un error extraño con respecto a la variable errno.</div><div style><br></div><div style>Hasta donde tengo entendido, la variable errno es una variable declarada en el fichero errno.h y la cual ciertas funciones cambian su valor para identificar el error real.</div>
<div style><br></div><div style>Os pongo el fragmento de código en el cual estoy teniendo el problema:</div><div style><br></div><div style><div>int create_config(void) {</div><div>    int fd;</div><div>    char *buffer=NULL;</div>
<div>    size_t linecap=0;</div><div>    extern int errno;</div><div>    errno=0;</div><div>    fd=open(CONFIG_FILE, O_CREAT | O_EXCL | O_WRONLY, S_IRUSR | S_IWUSR);</div><div>    //perror("Que cojones pasa");</div>
<div>    printf("El valor de errno es %d\n",errno);</div><div>    printf("Creando el fichero %s\n",CONFIG_FILE);</div><div>    printf("El valor de fd es %d\n",fd);</div><div>    perror("Que cojones pasa");</div>
<div>    if(fd<0) {</div><div>        printf("El valor de errno es %d\n",errno);</div><div>        if(errno==EEXIST)</div><div>            return 1;</div><div>        else</div><div>            return 2;</div>
<div>    }</div><div><br></div><div><br></div><div style>La salida de este fragmento de código es la siguiente:</div><div style><br></div><div style><div><font face="arial, sans-serif"><span style="white-space:nowrap">El valor de errno es 17</span></font></div>
<div><font face="arial, sans-serif"><span style="white-space:nowrap">Creando el fichero /usr/home/carlos/etc/test.cfg</span></font></div><div><font face="arial, sans-serif"><span style="white-space:nowrap">El valor de fd es -1</span></font></div>
<div><font face="arial, sans-serif"><span style="white-space:nowrap">Que cojones pasa: No such file or directory</span></font></div><div><font face="arial, sans-serif"><span style="white-space:nowrap">El valor de errno es 2</span></font></div>
<div><br></div><div style>Como podéis comprobar, en un principio open cambia la variable errno al valor correcto (17, que quiere decir que el fichero ya existe), sin embargo a la hora de ejecutar la sentencia perror("Que cojones pasa") la salida ya es No such file or directory, lo cual es un valor de errno de 2 (como compruebo despues del if).</div>
<div style><br></div><div style>Hasta donde yo se, printf y perror no cambian el valor de errno y no hay punteros ni nada extraño que haga modificar el programa de una forma no deseada (solo son 3 printfs,perror).</div><div style>
<br></div><div style>Como nota curiosa, si descomento el primer perror justo despues de la llamada a open, la ejecución del fragmento de código es correcta, errno siempre vale 17.</div><div style><br></div><div style><br>
</div><div style>El entorno que trabajo es el siguiente:</div><div style><br></div><div style>Programa single thread.</div><div style><br></div><div style><div>gcc -v</div><div>Using built-in specs.</div><div>Target: amd64-undermydesk-freebsd</div>
<div>Configured with: FreeBSD/amd64 system compiler</div><div>Thread model: posix</div><div>gcc version 4.2.1 20070831 patched [FreeBSD]</div><div><br></div><div><br></div><div style>Gracias por vuestro tiempo</div><div style>
<br></div><div style>Saludos.</div></div></div></div></div>