[C con Clase] Problemas con variable errno
Carlos
decvt100 en gmail.com
Mar Mayo 14 13:57:29 CEST 2013
Buenas lista,
Estoy haciendo un programita simple pero me estoy encontrando con un error
extraño con respecto a la variable errno.
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.
Os pongo el fragmento de código en el cual estoy teniendo el problema:
int create_config(void) {
int fd;
char *buffer=NULL;
size_t linecap=0;
extern int errno;
errno=0;
fd=open(CONFIG_FILE, O_CREAT | O_EXCL | O_WRONLY, S_IRUSR | S_IWUSR);
//perror("Que cojones pasa");
printf("El valor de errno es %d\n",errno);
printf("Creando el fichero %s\n",CONFIG_FILE);
printf("El valor de fd es %d\n",fd);
perror("Que cojones pasa");
if(fd<0) {
printf("El valor de errno es %d\n",errno);
if(errno==EEXIST)
return 1;
else
return 2;
}
La salida de este fragmento de código es la siguiente:
El valor de errno es 17
Creando el fichero /usr/home/carlos/etc/test.cfg
El valor de fd es -1
Que cojones pasa: No such file or directory
El valor de errno es 2
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).
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).
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.
El entorno que trabajo es el siguiente:
Programa single thread.
gcc -v
Using built-in specs.
Target: amd64-undermydesk-freebsd
Configured with: FreeBSD/amd64 system compiler
Thread model: posix
gcc version 4.2.1 20070831 patched [FreeBSD]
Gracias por vuestro tiempo
Saludos.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130514/5333ef8f/attachment.html>
Más información sobre la lista de distribución Cconclase