Archivo Linux USERS (2001) — La Programación bajo Linux

Archivo histórico · Linux USERS · 2001 Autoría del documento original: Arturo «Buanzo» Busleiman. Transcripción del documento de trabajo recuperado ProgLinux-1v2.doc. Fecha de modificación conservada: 2001-02-27. Recuperado para consulta privada el 11 de noviembre de 2026. El texto conserva la redacción y el contexto técnico de su época. Las capturas originales se reproducen junto a…


Bienvenidos al primer número de Linux USERS. Esta serie de artículos irá introduciéndolo en el entorno de programación de Linux, pero no es un curso de programación, por lo que para comprender estos artículos deberá tener un previo conocimiento de la programación en general, sea bajo DOS, Windows, o en el lenguaje de programación que sea. Lo ideal seria que sepa algo de Lenguaje C bajo DOS. En caso de no saber, hay sitios con tutoriales en Español e Ingles sobre Lenguaje C muy buenos. Pero empecemos a estudiar:

La Programación bajo Linux

El Sistema Operativo Linux cuenta con cientos (por no decir miles) de herramientas de programación, documentación, compiladores, ensambladores, analizadores, que puede utilizar para desarrollar cualquier tipo de programa, incluso para otras plataformas no-Unix. Eso significa que puede hacer un programa para DOS desde Linux, por ejemplo. Esto se llama compilación cruzada, y es un tema mas avanzado que en otro artículo futuro intentare explicar. Le comento esto para que se de una idea del potencial que un programador tiene en sus manos al utilizar Linux como su entorno de desarrollo. Ni siquiera necesita comprar un compilador comercial para desarrollar aplicaciones! Se ahorra bastante dinero, como imaginarán.

En Linux, tenemos dos metodologías de programación:

  • Escribiendo el código fuente (source) y luego compilando aparte, ó

  • Utilizar un entorno de desarrollo integrado (IDE – Integrated Development Environment) que nos permita editar y compilar desde un mismo programa, incluso la depuración integrada del mismo.

Comenzare introduciéndolos a la metodología descripta en el primer punto.

Bien, comenzaremos haciendo un simple programa llamado holamundo.c, que luego de compilarlo y obtener el binario holamundo (o el nombre que querramos darle) y ejecutarlo, imprima `Hola Mundo!’ en nuestra consola. Si, ya sé que es típico, no se rían programadores 🙂

Primero hagamos log-in al sistema ingresando nuestro usuario y clave. Sería cómodo que crearemos un subdirectorio donde alojar nuestro código fuente y programas, por lo que en el prompt tipearemos:

~# mkdir fuentes

~# cd fuentes

En este punto el prompt nos indicará (esto depende de la distribución y configuración de nuestro Linux, aunque esta configuración está estandarizada ya) que nos encontramos en el subdirectorio `fuentes’ dentro de nuestro Home Directory (que es el subdirectorio que nos fue asignado para nuestro uso personal dentro del sistema, y se lo designa por el símbolo `~’):

~/fuentes #

Hay muchos editores de texto que podemos utilizar para tipear nuestro código fuente, a mi particularmente me gusta el `joe’ o el editor interno del `mc’ (Midnight Commander, un programa que se asemeja mucho al mítico Norton Commander para DOS). Después está el `vi’ que viene instalado por defecto generalmente, pero no les resultara cómodo probablemente, también tenemos el `emacs’, que también es mítico dentro del ambiente UNIX. Utilizaremos el `joe’ y el `mc’ por ahora. Si no lo tiene instalado, utilizando el programa de setup de su distribución puede instalarlo.

Bien, como venia diciendo, para editar holamundo.c procederemos a ejecutar el siguiente comando, dentro del subdirectorio `fuentes’:

~/fuentes # joe holamundo.c

O con el Midnight Commander, utilizaremos la siguiente secuencia:

  • ~/fuentes # mc

  • Dentro del mc, tecleamos la combinación Shift+F4

  • En el cuadro de diálogo, ingresamos `holamundo.c’ y presionamos ENTER

  • En este punto, ya estamos dentro del editor.

Tipearemos el siguiente código fuente: (previsible para muchos)

#include <stdio.h>

int main() {

printf(“\nHolaaaaaaaaaa mundooooooooo!!!!\n\n”);

return (0);

}

Para grabar y salir utilizaremos la siguiente secuencia, dependiendo de si estamos usando `mc’ o `joe’:

  • Con el Joe: CTRL+K X

  • Con el MC: F2, F10, F10, ENTER

Ambas secuencias nos dejaran en el prompt (~/fuentes #).

Les recomiendo que vayan aprendiendo como editar archivos (con el editor que sea) ya que este paso-a-paso descriptivo no lo haré en sucesivos artículos.

Hay una herramienta que nos sirve para hacer que nuestro código fuente aparezca prolijo, o para que su forma visual se adapte a la de diferentes estándares, como la de Kerningan & Ritchie (los creadores de Lenguaje C). Esta herramienta se llama `indent’, por su función: indentar texto, o sea, aplicar espacios, tabulaciones, formato de comentarios, etc. Se utiliza así:

~/fuentes # indent holamundo.c

Si queremos ver como quedó nuestro programa, utilicemos el comando `cat’ (el equivalente al `type’ de DOS, aunque mucho más funcional), de la siguiente forma:

~/fuentes # cat holamundo.c

En la consola veremos algo así:

#include <stdio.h>

int

main () {

printf(“\nHolaaaaaaaaaa mundooooooooo!!!!\n\n”);

return (0);

}

En este ejemplo, los cambios generados por `indent’ no son muy visibles, pero les aseguro que lo van a adorar a medida que hagan programas mas largos y complejos (y espero que lo hagan).

🔎  Archivo Linux USERS (2001) — Análisis de red con Nmap

El sistema operativo Linux contiene una serie de librerías básicas, y también muchas adicionales, que proveen a las aplicaciones que programemos que de una enorme cantidad de funciones. Estas librerías son conceptualmente iguales a los DLL de Windows. DLL son las siglas en ingles de Librería de Vinculación Dinámica (Dynamic Link Library), y bajo Linux se llaman `Shared Libraries” (Librerías Compartidas), porque las pueden utilizar (y de hecho, lo hacen) varios procesos (programas ejecutándose) al mismo tiempo. Esto trae ventajas e inconvenientes, ya que el tamaño del binario de nuestros programas se verá reducido, porque utilizará llamadas a librerías que contienen las funciones que desea llamar. ¿Pero que pasa si yo utilizo una librería que no está presente en todos los sistemas? El programa no funcionará. Al intentar ejecutarlo nos dirá que le falta una librería. Para resolver este problema podemos hacer dos cosas:

  • Conseguir la librería o una nueva versión de la misma e instalarla en el sistema

  • Conseguir una versión compilada estáticamente (static) del programa.

¿Qué significa eso de `compilada estáticamente’? Que cuando nosotros compilamos el programa, le dijimos al compilador que agregue a nuestro binario el código que se utiliza de las librerías compartidas, para que sea independiente de las mismas. Esto nos trae como ventaja que el binario se pueda ejecutar en cualquier sistema, ya que no necesita librerías compartidas, porque contiene todo el código necesario dentro suyo. Y como desventaja el tamaño: va a ser enorme 🙂

Es práctica común que en los Home Site de los programas para Linux se encuentren versiones static y shared (compartidas), siendo shared las comunes, y también el código fuente de el/los programa/s en cuestión.

La mayoría de los programas de Linux proveen al usuario que los utiliza de una licencia llamada GPL: General Public License (Licencia del Publico General), que entre otras cosas dice que el código fuente del programa lo puede utilizar cualquiera, para sus propios programas, o para modificar una versión del programa original, pero que esas partes mantienen el copyright del autor original, y se les debe dar crédito a ellos por las partes que utilicemos en nuestros programas. Así es como creció Linux. Se respeta esta licencia, es buena para todos: los programas son gratis, de código fuente abierto, nos permiten aprender muchísimo si queremos ver como se hacen diferentes cosas, tenemos el código fuente ahí, al alcance de nuestras manos para modificarlo, leerlo, utilizarlo, estudiarlo como querramos. ¿Verdad que la idea es interesante y atrayente? Bueno, es una realidad.

Bien, pasemos a compilar nuestro programa. ¿qué compilador usaremos? El GNU C Compiler, conocido como gcc. Actualmente, el gcc no es solo un compilador de C, sino que es un front-end para muchos diferentes lenguajes. Pero que esto no nos preocupe por ahora. Hicimos un programa en C, y vamos a compilarlo.

El gcc tiene muchísimos parámetros muy bien documentados en las páginas del manual o en las páginas info (manual pages e info pages respectivamente), pero las mas comunes son estas:

-Wall GCC nos mostrará todos los mensajes de advertencia

-pedantic En combinación con -Wall, genera aún mas advertencias 🙂

-O[1,2,3,4] GCC aplicará optimizaciones de nivel 1, 2, 3 o 4. En la documentación podemos ver específicamente que optimizaciones

realiza dependiendo del nivel.

-o path/nombre El binario se grabará en directorio y archivo especificados.

-c No crear codigo objeto. Se usa en projectos con muchos archivos .c separados, que se compilan con -c, generan .o y luego se compilan todos juntos, generando el binario final (sin usar el parametro -c).

-g GCC incluirá símbolos de depuracion en el binario, para que podamos depurarlo (debuggearlo, en la jerga) con el GNU Debugger.

Todas estas opciones las podemos combinar entre si para lograr la compilación deseada, habrá casos en los que los Warnings (advertencias) generados no nos sirvan o interesen (aunque siempre deberían interesarnos), o no necesitemos optimización o símbolos de depuración, no son de uso obligatorio ninguno de estos parámetros

En nuestro caso, no nos interesan los warnings que puedan llegar a aparecer ni nada, ya que no aparecerá ninguno, es un código limpio. Tampoco necesitamos optimización (¿qué vamos a optimizar de un printf() de una cadena constante?), ni símbolos de depuración (aún, ya llegaremos al GNU Debugger [gdb]), y como queremos un binario, ya que nuestro programa consta de un solo archivo fuente, no utilizaremos -c. Por lo tanto, compilemos y ejecutemos nuestro programa, asignando `holamundo’ como archivo de salida:

~/fuentes # gcc -o holamundo holamundo.c

Ahora ejecutémoslo:

~/fuentes # ./holamundo

Holaaaaaaaaaa mundooooooooo!!!!

El ./ delante de holamundo es importante, porque el directorio actual no se encuentra en el PATH del sistema.

🔎  Archivo Linux USERS (2001) — Análisis de red con Nmap

Bueno, con esto finalizamos el primer artículo. Espero lo hayan disfrutado y les haya sido de utilidad. Cualquier duda, comentario o crítica, envíenla a [email protected].


Versión anterior conservada — ProgLinux-1.doc

Bienvenidos al primer número de Linux USERS. Esta serie de artículos irá introduciendolo en el entorno de programación deLinux, pero no es un curso de programación, por lo que para comprender estos artículos deberá tener un previo conocimiento de la programación en general, sea bajo DOS, Windows, o en el lenguaje de programación que sea. Lo ideal seria que sepa algo de Lenguaje C bajo DOS. En caso de no saber, hay sitios con tutoriales en Español e Ingles sobre Lenguaje C muy buenos. Pero empecemos a estudiar:

La Programacion bajo Linux

El Sistema Operativo Linux cuenta con cientos (por no decir miles) de herramientas de programacion, documentación, compiladores, ensambladores, analizadores, que puede utilizar para desarrollar cualquier tipo de programa, incluso para otras plataformas no-Unix. Eso significa que puede hacer un programa para DOS desde Linux, por ejemplo. Esto se llama compilación cruzada, y es un tema mas avanzado que en otro artículo futuro intentare explicar. Le comento esto para que se de una idea del potencial que un programador tiene en sus manos al utilizar Linux como su entorno de desarrollo. Ni siquiera necesita comprar un compilador comercial para desarrollar aplicaciones! Se ahorra bastante dinero, como imaginarán.

En Linux, tenemos dos metodologías de programacion:

  • Escribiendo el código fuente (source) y luego compilando aparte, ó

  • Utilizar un entorno de desarrollo integrado (IDE – Integrated Development Environment) que nos permita editar y compilar desde un mismo programa, incluso la depuración integrada del mismo.

Comenzare introduciendolos a la metodología descripta en el primer punto.

Bien, comenzaremos haciendo un simple programa llamado holamundo.c, que luego de compilarlo y obtener el binario holamundo (o el nombre que querramos darle) y ejecutarlo, imprima `Hola Mundo!’ en nuestra consola. Si, ya sé que es típico, no se rian programadores 🙂

Primero hagamos log-in al sistema ingresando nuestro usuario y clave. Sería cómodo que crearamos un subdirectorio donde alojar nuestro codigo fuente y programas, por lo que en el prompt tipearemos:

~# mkdir fuentes

~# cd fuentes

En este punto el prompt nos indicará (esto depende de la distribución y configuración de nuestro Linux, aunque esta configuración está estandarizada ya) que nos encontramos en el subdirectorio `fuentes’ dentro de nuestro Home Directory (que es el subdirectorio que nos fue asignado para nuestro uso personal dentro del sistema, y se lo designa por el simbolo `~’):

~/fuentes #

Hay muchos editores de texto que podemos utilizar para tipear nuestro código fuente, a mi particularmente me gusta el `joe’ o el editor interno del `mc’ (Midnight Commander, un programa que se asemeja mucho al mítico Norton Commander para DOS). Despues está el `vi’ que viene instalado por defecto generalmente, pero no les resultara cómodo probablemente, tambien tenemos el `emacs’, que tambien es mítico dentro del ambiente Unix. Pero como a mi me gusta el `joe’, utilizaremos el `joe’. Si no lo tenes instalado, utilizando el programa de setup de tu distribucion podés instalarlo.

Bien, como venia diciendo, para editar holamundo.c procederemos a ejecutar el siguiente comando, dentro del subdirectorio `fuentes’:

~/fuentes # joe holamundo.c

O con el midnight commander, utilizaremos la siguiente secuencia:

  • ~/fuentes # mc

  • Dentro del mc, apretamos la combinación Shift+F4

  • En el cuadro de diálogo, ingresamos `holamundo.c’ y presionamos ENTER

  • En este punto, ya estamos dentro del editor.

Tipearemos el siguiente codigo fuente: (previsible para muchos)

#include <stdio.h>

int main() {

printf(“\nHolaaaaaaaaaa mundooooooooo!!!!\n\n”);

return (0);

}

Para grabar y salir utilizaremos la siguiente secuencia, dependiendo de si estamos usando `mc’ o `joe’:

  • Con el Joe: CTRL+K X

  • Con el MC: F2, F10, F10, ENTER

Ambas secuencias nos dejaran en el prompt (~/fuentes #).

Les recomiendo que vayan aprendiendo como editar archivos (con el editor que sea) ya que este paso-a-paso descriptivo no lo haré en sucesivos artículos.

Hay una herramienta que nos sirve para hacer que nuestro codigo fuente aparezca prolijo, o para que su forma visual se adapte a la de diferentes estándares, como la de Kerningan & Ritchie (los creadores de Lenguaje C). Esta herramienta se llama `indent’, por su función: indentar texto, o sea, aplicar espacios, tabulaciones, formato de comentarios, etc. Se utiliza así:

~/fuentes # indent holamundo.c

Si queremos ver como quedó nuestro programa, utilicemos el comando `cat’ (el equivalente al `type’ de DOS), de la siguiente forma:

~/fuentes # cat holamundo.c

En la consola veremos algo asi:

#include <stdio.h>

int

main () {

printf(“\nHolaaaaaaaaaa mundooooooooo!!!!\n\n”);

return (0);

}

En este ejemplo, los cambios generados por `indent’ no son muy visibles, pero les aseguro que lo van a adorar a medida que hagan programas mas largos y complejos (y espero que lo hagan).

🔎  Archivo Linux USERS (2001) — Análisis de red con Nmap

El sistema operativo Linux contiene una serie de librerias básicas, y tambien muchas adicionales, que proveen a los programas que utilicemos de una enorme cantidad de funciones. Estas librerias son conceptualmente iguales a los DLL de Windows. DLL son las siglas en ingles de Librería de Vinculación Dinámica (Dynamic Link Library), y bajo Linux se llaman `Shared Libraries” (Librerias Compartidas), porque las pueden utilizar (y de hecho, lo hacen) varios procesos (programas ejecutandose) al mismo tiempo. Esto trae ventajas e inconvenientes, ya que el tamaño del binario de nuestros programas se verá reducido, porque utilizará llamadas a librerias que contienen las funciones que desea llamar. ¿Pero que pasa si yo utilizo una librería que no está presente en todos los sistemas? El programa no funcionará. Al intentar ejecutarlo nos dirá que le falta una librería. Para resolver este problema podemos hacer dos cosas:

  • Conseguir la librería o una nueva versión de la misma e instalarla en el sistema

  • Conseguir una version compilada estáticamente (static) del programa.

¿Qué significa eso de compilada estáticamente? Que cuando nosotros compilamos el programa, le dijimos al compilador que agregue a nuestro binario el codigo que se utiliza de las librerias compartidas, para que sea independiente de ellas. Esto nos trae como ventaja que el binario se pueda ejecutar en cualquier sistema, ya que no necesita librerias compartidas, porque contiene todo el codigo necesario dentro suyo. Y como desventaja el tamaño: va a ser enorme 🙂

Es práctica común que en los Home Site de los programas para Linux se encuentren versiones static y shared (compartidas), siendo shared las comunes, y tamien el código fuente del/los programa/s en cuestión.

La mayoría de los programas de Linux proveen al usuario que los utiliza de una licencia llamada GPL: General Public License (Licencia del Publico General), que entre otras cosas dice que el codigo fuente del programa lo puede utilizar cualquiera, para sus propios programas, o para modificar una version del programa original, pero que esas partes mantienen el copyright del autor original, y se les debe dar crédito a ellos por las partes que utilicemos en nuestros programas. Así es como creció Linux. Se respeta esta licencia, es buena para todos: los programas son gratis, de codigo fuente abierto, nos permiten aprender muchisimo si queremos ver como se hacen diferentes cosas, tenémos el codigo fuente ahí, al alcance de nuestras manos para modificarlo, leerlo, utilizarlo, estudiarlo como querramos. No me digan que no les atrae la idea. Bueno, es una realidad.

Bien, pasemos a compilar nuestro programa. ¿qué compilador usaremos? El GNU C Compiler, conocido como gcc. Actualmente, el gcc no es solo un compilador de C, sino que es un front-end para muchos diferentes lenguajes. Pero no nos preocupemos por esto por ahora. Hicimos un programa en C, y vamos a compilarlo.

El gcc tiene muchisimos parametros muy bien documentados en las páginas del manual o en las páginas info (manual pages e info pages respectivamente), pero las mas comunes son estas:

-Wall GCC nos mostrará todos los mensajes de advertencia

-pedantic En combinacion con -Wall, genera aún mas advertencias 🙂

-O[1,2,3,4] GCC aplicará optimizaciones de nivel 1, 2, 3 o 4. En la documentación podemos ver específicamente que optimizaciones

realiza dependiendo del nivel.

-o path/nombre El binario se grabará en directorio y archivo especificados.

-c No crear codigo objeto. Se usa en projectos con muchos archivos .c separados, que se compilan con -c, generan .o y luego se compilan todos juntos, generando el binario final (sin usar el parametro -c).

-g GCC incluirá símbolos de depuracion en el binario, para que podamos depurarlo (debuggearlo, en la jerga) con el GNU Debugger.

Todas estas opciones las podemos combinar entre si para lograr la compilación deseada, habrá casos en los que los Warnings (advertencias) generados no nos sirven o interesan (aunque siempre deberian interesarnos), o no necesitemos optimizacion o simbolos de depuración, no son de uso obligatorio ninguno de estos parametros

En nuestro caso, no nos interesan los warnings que puedan llegar a aparecer ni nada, ya que no aparecerá ninguno, es un codigo limpio. Tampoco necesitamos optimización (¿qué vamos a optimizar de un printf() de una cadena constante?), ni simbolos de depuración (aún, ya llegaremos al GNU Debugger [gdb]), y como queremos un binario, ya que nuestro programa consta de un solo archivo fuente, no utilizaremos -c. Por lo tanto, compilemos y ejecutemos nuestro programa, dándole `holamundo’ como archivo de salida:

~/fuentes # gcc -o holamundo holamundo.c

Ahora ejecutemoslo:

~/fuentes # ./holamundo

Holaaaaaaaaaa mundooooooooo!!!!

El “./” delante de holamundo es importante, porque el directorio actual no se encuentra en el PATH del sistema.

Bueno, con esto terminanamos el primer artículo. Espero lo hayan disfrutado y les haya sido de utilidad. Cualquier duda, comentario o crítica, envienla a [email protected].