<div dir="ltr"><br><div><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 15 de mayo de 2013 12:19, Carlos <span dir="ltr"><<a href="mailto:decvt100@gmail.com" target="_blank">decvt100@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">El 14 de mayo de 2013 16:04, Salvador Pozo <span dir="ltr"><<a href="mailto:salvador@conclase.net" target="_blank">salvador@conclase.net</a>></span> escribió:<br>
<div class="gmail_extra"><div class="gmail_quote"><div class="im">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hola, Carlos:<br>
<br>
A ver si puede responderte alguien que pueda probarlo bajo linux. Yo he probado en Windows y no puedo reproducir el error, errno siempre vale 17, independientemente de que comente o no la línea "perror". Bueno, siempre menos la primera vez, claro. :)<br>


<br>
Hasta pronto.<br></blockquote></div></div></div></div>
</blockquote></div><br></div><div class="gmail_extra">Buenas Salvador,<div><br></div><div>Creo que ya se donde está el problema. Aunque en la documentación de printf no dice nada, parece ser que puede pasar que cambie la variable de errno.</div>
<div><br></div><div><div> A common mistake is to do</div><div><br></div><div>           if (somecall() == -1) {</div><div>               printf("somecall() failed\n");</div><div>               if (errno == ...) { ... }</div>
<div>           }</div><div><br></div><div>       where errno no longer needs to have the value it had upon return from</div><div>       somecall() (i.e., it may have been changed by the printf(3)).  If the</div><div>       value of errno should be preserved across a library call, it must be</div>
<div>       saved:</div></div><div><br></div><div><a href="http://man7.org/linux/man-pages/man3/errno.3.html">http://man7.org/linux/man-pages/man3/errno.3.html</a><br></div><div><br></div><div>Ojeando esta página he visto un parrafo que me ha hecho dudar:</div>
<div><br></div><div><div>It was common in traditional C to declare errno manually (i.e.,</div><div>       extern int errno) instead of including <errno.h>.  Do not do this.</div><div>       It will not work with modern versions of the C library.  However, on</div>
<div>       (very) old UNIX systems, there may be no <errno.h> and the</div><div>       declaration is needed.</div><div><br></div><div>Por ahora, siempre que quería meter variables globales declaradas en otros ficheros utilizaba extern variable. No me queda claro si se refieren a que SÓLO hay que introducir el fichero errno.h sin declarar en ningún otro fichero fuente la variable extern int errno o que hay que utilizar el include y el extern int.</div>
</div><div><br></div><div style>Es decir, quizá ahí cuando hablan de antiguamente se refieren a que no incluían el fichero errno.h más que quejarse de que declarasen la variable como extern(es decir, incluir el fichero Y declarar extern int errno).</div>
<div style><br></div><div style>Sabes algo sobre este tema?</div><div style><br></div><div style>Gracias.</div><div style><br></div><div style>Saludos.</div></div></div>