Estos días a varios de mis alumnos les ha surgido la necesidad de probar la existencia de un archivo haciendo la llamada al sistema open(). Es bastante sencillo, sólo hay que probar si éste se ha podido abrir (como lectura, por ejemplo, para no tocar el fichero en la medida de lo posible).
Una vez se abre el fichero pueden ocurrir varias cosas:
- que la llamada a open() no devuelva error. Por tanto el fichero existe
- que la llamada a open() de error:
- si el resultado de errno es ENOENT (constante de error), ENOFILE en algunos sistemas o 2 (valor que generalmente vale dicha constante), el fichero no existe
- si el resultado de errno es distinto, no podemos asegurar que no exista, pero tal vez el nombre de fichero no sea correcto, la ruta no exista, o no tengamos acceso a él.
Para contemplar estos casos creamos la función exists(). Incluyo la función y el código de ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| /**
*************************************************************
* @file exists.c
* @brief Verifica la existencia o no de un fichero
*
* @author Gaspar Fernández <blakeyed@totaki.com>
* http://totaki.com/poesiabinaria/algoritmos/
*************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
short exists (char *fname )
{
int fd =open (fname , O_RDONLY );
if (fd <0) /* error */
return (errno ==ENOENT )?-1:-2;
/* Si no hemos salido ya, cerramos */
close (fd );
return 0;
}
int main (int argc , char *argv [])
{
int abre =exists ("archivo");
switch (abre )
{
case 0: printf ("El archivo existe\n"); break;
case -1: printf ("El archivo no existe\n"); break;
case -2: printf ("Ocurrió un error al abrir. %d (%s)\n", errno , strerror (errno )); break;
default: printf ("Nunca veremos este mensaje");
}
return EXIT_SUCCESS ;
} |
Descargar: exists (1Kb)
Para ejecutarlo podemos probar:
$ ./exists
El archivo no existe
$ touch archivo
$ ./exists
El archivo existe
$ chmod -r archivo # Eliminamos permiso de lectura al fichero
$ ./exists
Ocurrió un error al abrir. 13 (Permission denied)
Puede que también seas de los que piensan que si hay algún error al abrir el archivo, da igual, lo marcamos como no existente, de todas formas no podemos hacer nada con él. Así, construimos una función exists() más intuitiva que devuelve 1 cuando existe y 0 cuando no existe o hay error:
1 2 3 4 5 6 7 8 9
| short exists(char *fname)
{
int fd=open(fname, O_RDONLY);
if (fd<0) /* error */
return 0;
/* Si no hemos salido ya, cerramos */
close(fd);
return 1;
} |
Categories: C/C++, Clases particulares, algoritmos Tags: close, enoent, enofile, exist, file, Linux, llamada, open, rdonly, sistema, unix
Hace más de un año que se estrenó la película, pero ahora es cuando decido incluirla aquí, que tengo capturas y tiempos concretos:
En el minuto 11 segundo 25 podemos ver el primer regalo… GNU/EMACS !!

y para los que no sepan lo que es capaz de hacer Emacs… ahora lo vemos ejecutando un juego en Emacs lisp: hanoi-unix:

Aunque sólo sale un instante… igual que sólo sale durante un solo frame…

¡ Ubuntu !

Luego, alrededor del minuto 21 y durante casi un minuto podemos disfrutar de un sistema Unix con su terminal, y ejecutando comandos existentes, como top, uname, history, whoami, y dentro de history, se ve kill, ps, cat, vi, en fin… algo que nos suena y no suele salir en una película estadounidense…
Encontráis más información sobre los guiños a GNU/Linux o Unix en la película en estos enlaces:
Tron Legacy, ¿qué sistema operativo usaba Flynn?
La veracidad UNIX de Tron Legacy
Mucho tiempo sin una sección de estas, y traigo contenidos muy variados:
Categories: General, curioso Tags: csrf, denis, elefante, foundation, Linux, nvidia, ordenador, PHP, python, raspberry, ritchie, sed, tareas, trucos, vlc
El paquete gdm para LMDE suele traernos a todos por la calle de la amargura, y es que en ocasiones viene con gdm-setup, y en cuanto se actualiza, ya no trae este pequeño programa.
Aunque la configuración de gdm no es nada del otro mundo, se agradece el entorno gráfico, aunque sólo sea para activar el autologin. Aunque puede ser un riesgo para la seguridad de nuestro ordenador, cuando instalamos un sistema para alguien que no se quiere complicar mucho la vida, es conveniente ofrecerle la opción de entrar automáticamente en su sesión.
Para ello tenemos que editar /etc/gdm3/daemon.conf (como root):
$ sudo nano /etc/gdm3/daemon.conf
Y en la sección [daemon] debemos incluir:
AutomaticLoginEnable=true
AutomaticLogin=usuario
(Control+X, Sí, Intro <- Para salir y guardar cambios en nano)
Donde usuario es el nombre de usuario que queremos que se identifique automáticamente.

En España, se la conoce como “Hackers 3: Conspiración en la red”, aunque no tiene mucho de tercera parte; o sólo “Conspiración en la red”, en Europa también se llama “Conspiracy.com” y en EEUU, su título original es “Antitrust“. Es una de esas películas que hace varios guiños linuxeros, aunque aparezca un Tim Robins disfrazado de Bill Gates.
En el fotograma que vemos al principio del post, podemos ver claramente un escritorio Gnome, con sus iconos característicos justo en el minuto 2:15; además de muchas pantallas de Gnome y mucho código HTML en los títulos de crédito podemos encontrar una terminal donde ejecutan “ps”:
En el minuto 51:42 y pocos segundos después, podemos ver en una imagen de una cámara (que sale en un tono azulado, excepto un sombrero rojo (Red Hat), y un minuto más tarde se ve cómo verifica los dispositivos de almacenamiento montados con mount:

En general, la película tiene muchos guiños al software libre, como dicen en FayerWayer, podemos ver entre otras cosas:
- A Miguel de Icaza, fundador del proyecto Gnome, entregando un premio a uno de los protagonistas.
- Scott McNealy, CEO de Sun en 2001, entregando otro premio.
- y muchas cosas más.
Categories: Linux On Movies/TV Tags: antitrust, bill, gates, gnome, hackers, icaza, Linux, mcnealy, miguel, robins, scott, software, tim
Son pequeñas aplicaciones sin las cuales no podría salir adelante día a día. Aunque a veces no las mime demasiado y no les haga mucho caso, deberían saber que son importantes para mí, para mi vida online y yo informático. He intentado establecer un orden, pero todas ellas son muy importantes, por lo que ocuparían todas la primera posición:
-
Es un software muy completo y ligero para tomar notas, clasificarlas y buscar dentro de ellas. De todos los que he probado es el que mejor sensación me ha dejado con respecto a su facilidad de uso, velocidad y características. Disponible en Linux, Mac y Windows
-
Es un gran programa para anotar nuestras contraseñas y anotaciones para cualquier tipo de identificación electrónica (webs, banca online, routers, etc). Puedes ordenar las contraseñas por categorías, asignarles iconos, buscarlas, etc. Es muy fácil de utilizar, y guarda la información cifrada para que nadie más que tú pueda verla. Disponible para Linux, Mac y Windows
-
Un software para organizar mi economía personal, saber cuánto dinero tengo en la cartera y en el banco, quién me debe y a quién le debo. Es muy completo y funciona en Linux, Mac y Windows.
-
Llamadme friki, pero es mi editor de texto / IDE favorito para programar. Con multitud de opciones, automatizable, personalizable y todo a mano, aunque para aprender fue algo difícil en principio, una vez que sabes las cuatro cosas básicas, todo va sobre ruedas, y cada día me gusta más (excepto la opción deshacer, pero bueno, nadie es perfecto). Funciona en Linux, Mac, Windows, *BSD, Solaris y algunos más
-
Un cliente para Twitter muy ligero, cómodo e intuitivo. Hay muchos clientes para microbloguear, pero con éste es con el que me siento más cómodo. Disponible para Linux, Mac, Windows y Chrome, aunque para Windows y Mac es bastante inestable aún.
En algunos de estos proyectos, y en otros más intento colaborar de diferentes formas, aunque a veces no en la medida que me gustaría, por falta de tiempo, como pasa siempre:
- Clicks en la publicidad de sus webs oficiales
- Perfeccionamiento de traducciones
- Haciendo que más gente los utilice
- Reportando bugs
- Sugiriendo características
Y vosotros, ¿cómo colaboráis con vuestros proyectos preferidos? ¿Cuáles son esos 5 programas sin los que no podríais vivir?
Categories: General Tags: aplicaciones, bsd, dia, Emacs, grisbi, hotot, keepassx, keepnote, Linux, mac, programas, salvar, vivir, windows
Estos días, aunque inactivos, he seleccionado algunos enlaces que me han parecido interesantes:
Categories: Linux, curioso Tags: archivos, arrays, Borges, crontab, ejemplo, granada, hashtables, libre, Linux, matemáticas, renombrar, software
Estos son los enlaces que he visto interesantes durante la semana:
- Arduino IDE 1.0 disponible: muchos de los que programamos en esta plataforma lo agradecerán. Sobre todo porque en la librería Ethernet han implementado DHCP, lo cual es muy interesante. Aunque el entorno, como IDE, le siguen faltando muchas opciones.
- Uno de los actos de presentación del Nokia Lumia (Nuevo Teléfono con Windows Phone) era una presentación sobre el edificio en Londres donde trabaja Canonical. Bueno, estos hicieron un contraataque titulado Ubuntu Operation NightLight, no tan grande como podemos esperar, pero ¡ están ahí !
- Impresiones de Linux Mint 12: Lisa: Tengo ganas de probarlo, mientras, vamos a ver qué nos depara esta nueva versión.
- Tipos de gobernadores de las CPUs: Es un tema interesante que muchos lo dejamos tal y como está, pero podemos controlarlo.
- El captcha de Adafruit: Nada, sólo por el Captcha habrá que darle una oportunidad a la tienda. Muy curioso para los que os guste la electrónica. Lo descubrí gracias a @fransolano.
- ¿Cómo funciona el servicio FTP?. Buena explicación de cómo funciona (varias partes)
- Notificaciones de tuenti en Linux: Si eres Linuxero y usas tuenti, te interesa ver esto.
Actualizado a 5 / 12 / 2011 : Añadida la mención a @fransolano en el enlace de Adafruit.
Categories: Arduino, Comunicación, Linux, curioso Tags: Arduino, captcha, ftp, gobernadores, Linux, lumia, mint, nightlight, nokia, notificaciones, servicio, tuenti, ubuntu
Os dejo algunos enlaces interesantes recopilados estos últimos días:
- Speeding Up The Linux Kernel With Your GPU. Lo que leéis, hay un proyecto para acelerar el kernel con la ayuda de la GPU. Patrocinado por NVIDIA y la Universidad de Utah, puede hacer las lecturas/escrituras en sistemas de archivos cifrados 3 ó 4 veces más rápidos. En principio sólo vale para cifrado, pero bueno, sólo es cuestión de pensar qué tareas del kernel se podrán paralelizar y compensa hacer en GPU (vamos, que la transmisión de datos de y a la memoria gráfica no sea más lenta que procesar la tarea en CPU; y que la tarea sea paralelizable).
- Microsoft adquiera Skype, ¡es hora de usar Ekiga! Ha sido la noticia de la semana, y es que no sabemos qué pasará con Skype a partir de ahora, esperemos que los clientes se sigan manteniendo y la forma de funcionar actual. Aunque es un buen momento para que los desarrolladores de proyectos libres de VoIP se pongan las pilas y mejores bastante sus proyectos, para llegar a ser verdaderos rivales para este servicio. Al final del artículo vemos una imagen que me encanta (sky .net).
- ¿Has leído la licencia de Microsoft Windows? (Esa que todo el mundo acepta con los ojos cerrados) . De vez en cuando aparece algún artículo similar, pero es cierto que el 99% de los usuarios de Windows no lee la licencia y la acepta, aunque los fabricantes nos dan pocas opciones si se da el caso de que no aceptamos la licencia.
- ¿Qué son las bases de datos NOSQL? Es un artículo muy interesante sobre este tipo de bases de datos, nos puede servir como un buen punto de referencia para empezar a adentrarnos en este nuevo mundo (muchos enlaces para devorar información).
- Samsung libera código fuente del software usado en el Galaxy S II . Enhorabuena a Samsung por este movimiento, animará a muchos a tunear el sistema libremente y seguro que se promociona este modelo (y modelos futuros y derivados).
- Las estrategias de Twitter para minimizar la frustración de los usuarios . Cualquiera diría que Twitter está reduciendo la desesperación de los usuarios, son algunos detalles subliminales curiosos.
Categories: General Tags: bases, codigo, datos, frustración, fuente, gpu, kernel, libre, licencia, Linux, Microsoft, nosql, samsung, skype, software, twitter, windows
Esta noche estuve viendo la película Deuda de Sangre (Blood Work) de Clint Eastwood (2002). En ella, en el minuto 28 podemos ver cómo el protagonista se acerca a charlar con un implicado en un asesinato (Rick Hoffman), éste es informático.
En el fotograma podemos ver cómo detrás de él hay varios libros de Linux, y otro en el que se puede leer GNU. A la derecha del personaje hay uno de Red Hat Linux 6.1 (versión de Octubre del 99).
Seguiré publicando más cameos linuxeros
Y agradecería que, si conocéis alguno lo dejéis en los comentarios.
Últimos comentarios