Curso  Básico de UNIX

UNIX y C

El sistema operativo UNIX suele venir acompañado de un compilador para lenguaje C. Escribiendo programas en lenguaje C es posible crear comandos indistinguibles de los propios de UNIX. Como ejemplo, puede crearse el siguiente archivo, usando un editor de texto sencillo como el ae, o el comando cat si se tiene fé en la propia digitación.
 
Contenido del archivo hola.c:
 
  /* hola.c: programa de saludo */

  #include <stdio.h>
  main()
  {
    printf("Hola, mundo\n");
  }
 
Compilar el contenido de este archivo con el comando
  cc hola.c -o hola
Esto crea el archivo de salida hola, ejecutable en UNIX mediante el comando
  ./hola
Imprime, como es de suponer, la frase "Hola mundo".
Un ejemplo más interesante, con uso de llamadas a la biblioteca del sistema, es el ejemplo siguiente, una versión muy mínima del comando cat, que llamaremos cati.
 
Contenido del archivo cati.c:

 
/* cati: cat versión mínima */
# define LARGO 1024   /* define valor de variable LARGO */

main()
{
char bufer[LARGO];    /* declara un arreglo de caracteres */
  int n;              /* para contar caracteres leídos */

  /* llamada al sistema para leer caracteres desde la entrada
     estándar (0), hacia el arreglo bufer, en cantidad igual al
     tamaño del arreglo bufer
  */
  n = read(0, bufer, sizeof bufer);     /* primera lectura */

  /* repite mientras haya caracteres leídos, es decir, n>0 */
  while (n > 0)
  {
    /* llamada al sistema para escribir caracteres en salida
       estándar (1), en cantidad n, extrayendo desde arreglo
       bufer
    */
    write(1, bufer, n);

    n = read(0, bufer, sizeof bufer);   /* siguientes lecturas */
  }

  exit(0);      /* sale devolviendo c¢digo de retorno 0 */
}

 
Los extensos comentarios explican el funcionamiento. Compilar este programa con el comando
  cc cati.c -o cati
Esto crea el archivo de salida cati, ejecutable en UNIX. El comando
  ./cati <hola.c
muestra el contenido del programa hola.c. Esta versión mínima sólo funciona redireccionando la entrada estándar. Puede probarse su funcionamiento ingresando datos desde el teclado, finalizando con Ctrl-D. El programa puede interrumpirse con Ctrl-C. ¿Qué diferencia hay?
Es un problema de programación algo más complejo asimilar un nombre de archivo como parámetro y hacer que el programa despliegue el contenido de este archivo.
 

La razón por la que estos programa se invocan como ./hola y no simplemente hola es que el directorio actual no está habitualmente en la vía de búsqueda de ejecutables  (variable PATH). Colocando las versiones ejecutables de los programas hola o cati en un directorio como /bin los haría ejecutables directamente como cualquier comando de UNIX.
 
Estos ejemplos muestran la versatilidad de UNIX como sistema operativo: puede uno ampliarlo con comandos construídos por uno mismo que se integran perfectamente a los comandos propios del sistema. En las distribuciones de UNIX de dominio público suelen venir los fuentes en C de todos los comandos, lo cual permite, al usuario con conocimento suficiente, modificar o corregir estos programas.
 
 

 

Víctor A. González Barbone  vagonbar en fing edu uy
Instituto de Ingeniería Eléctrica - Facultad de Ingeniería - Montevideo, Uruguay.