Lenguaje C
El lenguaje C es uno de los lenguajes
que se usan en la actualidad más antigua. Data del año 1972 y fue escrito
por Dennis M Ritchie para los Laboratorios Bell, y es evolución del
lenguaje C.
El lenguaje C está mayormente orientado a la escritura
de sistemas operativos, aunque se trata de un lenguaje de medio nivel de
propósitos generales, por lo que puede ser utilizado para programar casi
cualquier tipo de tareas.
C es un lenguaje estructurado, no orientado a objetos, pero C++ es la modificación de C que permite la incorporación de clases, métodos y atributos, encapsulación y polimorfismo, y respeta toda la sintaxis de C, por lo que programadores de C que deseen incursionar en la programación orientada a objetos podrán hacerlo sin problemas, más que un cambio de "paradigma mental" a la hora de diseñar el código.
C es un lenguaje estructurado, no orientado a objetos, pero C++ es la modificación de C que permite la incorporación de clases, métodos y atributos, encapsulación y polimorfismo, y respeta toda la sintaxis de C, por lo que programadores de C que deseen incursionar en la programación orientada a objetos podrán hacerlo sin problemas, más que un cambio de "paradigma mental" a la hora de diseñar el código.
Los objetivos de C
Con la cantidad de
lenguajes que disponemos actualmente, muchos se pensarán que el lenguaje C es
obsoleto, y muy "duro" para trabajarlo comparado con otros lenguajes
más amigables con el programador.
Esto no es del todo cierto. Si bien C tiene una curva de aprendizaje más lenta, quien programa en C tiene un campo enorme de posibilidades, que van desde programas simples de gestión, comandos del sistema operativo, funcionalidades nuevas, hasta módulos del kernel y controladores de dispositivos.
El lenguaje C es el lenguaje utilizado para la programación de sistemas, o software de base, con lo que podemos afirmar que casi la totalidad del código fuente de un sistema operativo está escrito, sin duda, en C. Ejemplos son Unix y derivados (*nix, como Linux), o Windows.
No es un lenguaje pensado para escribir directamente aplicaciones de gestión gráficas en forma nativa, pero sí dispone de muchísimas librerías o bibliotecas de funciones que se pueden incorporar en un código para extender su funcionalidad.
Esto no es del todo cierto. Si bien C tiene una curva de aprendizaje más lenta, quien programa en C tiene un campo enorme de posibilidades, que van desde programas simples de gestión, comandos del sistema operativo, funcionalidades nuevas, hasta módulos del kernel y controladores de dispositivos.
El lenguaje C es el lenguaje utilizado para la programación de sistemas, o software de base, con lo que podemos afirmar que casi la totalidad del código fuente de un sistema operativo está escrito, sin duda, en C. Ejemplos son Unix y derivados (*nix, como Linux), o Windows.
No es un lenguaje pensado para escribir directamente aplicaciones de gestión gráficas en forma nativa, pero sí dispone de muchísimas librerías o bibliotecas de funciones que se pueden incorporar en un código para extender su funcionalidad.
C y
su biblioteca.
El lenguaje C posee un
núcleo muy simple, una serie de muy pocas palabras reservadas, y pocos tipos
nativos de datos, pero resulta un lenguaje extremadamente extensible a nuevas
funcionalidades mediante definiciones de nuevos tipos de datos de usuario,
incluso independiente de la arquitectura, y la suma de una gran cantidad de
funciones de biblioteca estándar y bibliotecas especializadas en diferentes
tareas.
Por ejemplo, un código fuente de C puede enriquecerse con bibliotecas de OpenSSL para permitirle al programador trabajar con funciones de cifrado y hash propias de la criptografía. También pueden incorporarse librerías gráficas como gtk o qt para entornos Unix/Linux, lo que permite fácilmente escribir aplicaciones gráficas de muchísima potencia.
En nuestros sistemas podremos instalar cualquier tipo de biblioteca que necesitemos, y utilizarlas dentro de nuestro código, lo que hace de C un lenguaje extremadamente flexible a la hora de cumplimentar objetivos.
Por ejemplo, un código fuente de C puede enriquecerse con bibliotecas de OpenSSL para permitirle al programador trabajar con funciones de cifrado y hash propias de la criptografía. También pueden incorporarse librerías gráficas como gtk o qt para entornos Unix/Linux, lo que permite fácilmente escribir aplicaciones gráficas de muchísima potencia.
En nuestros sistemas podremos instalar cualquier tipo de biblioteca que necesitemos, y utilizarlas dentro de nuestro código, lo que hace de C un lenguaje extremadamente flexible a la hora de cumplimentar objetivos.
C como lenguaje portable y el estándar ANSI.
Cuando hablamos de portabilidad de aplicaciones
nos referimos a aplicaciones que pueden ejecutarse en varias plataformas de
software de base, o, en definitiva, en varios sistemas operativos, como Unix,
Linux o Windows.
Una aplicación escrita en C es portable a nivel de código fuente, es decir, podemos portar la fuente de la aplicación de un sistema a otro, y compilarla para obtener los ejecutables para dicho sistema, sin mayores modificaciones.
Por supuesto, deberemos tener instaladas las bibliotecas de desarrollo utilizadas, en el sistema operativo en el que vamos a compilar.
C no es portable a nivel de código ejecutable, lo que significa que una aplicación compilada para Linux en formato, por ejemplo, ELF de 32 bits, no podrá ser ejecutada en windows, que utiliza formatos EXE o COM. Y viceversa, un .EXE de Windows no podrá ser ejecutado en un sistema *nix.
El código fuente sí puede compilarse, y para ello es necesario, o al menos muy recomendable, que el código fuente haya sido escrito siguiendo el estándar ANSI C, ya que muchos compiladores para diferentes plataformas de sistemas operativos podrán compilarlo sin problemas, tales como GCC en Linux/Unix, o DevCpp o MinGW en Windows.
Si el código fuente no fue escrito siguiendo ANSI, seguramente solo podrá ser compilado con el compilador o IDE en el que fue programado. Tal es el caso de Borland y sus compiladores Turbo, que generalmente incitan al programador a utilizar bibliotecas propietarias que no están disponibles en otros sistemas operativos como Linux.
Una aplicación escrita en C es portable a nivel de código fuente, es decir, podemos portar la fuente de la aplicación de un sistema a otro, y compilarla para obtener los ejecutables para dicho sistema, sin mayores modificaciones.
Por supuesto, deberemos tener instaladas las bibliotecas de desarrollo utilizadas, en el sistema operativo en el que vamos a compilar.
C no es portable a nivel de código ejecutable, lo que significa que una aplicación compilada para Linux en formato, por ejemplo, ELF de 32 bits, no podrá ser ejecutada en windows, que utiliza formatos EXE o COM. Y viceversa, un .EXE de Windows no podrá ser ejecutado en un sistema *nix.
El código fuente sí puede compilarse, y para ello es necesario, o al menos muy recomendable, que el código fuente haya sido escrito siguiendo el estándar ANSI C, ya que muchos compiladores para diferentes plataformas de sistemas operativos podrán compilarlo sin problemas, tales como GCC en Linux/Unix, o DevCpp o MinGW en Windows.
Si el código fuente no fue escrito siguiendo ANSI, seguramente solo podrá ser compilado con el compilador o IDE en el que fue programado. Tal es el caso de Borland y sus compiladores Turbo, que generalmente incitan al programador a utilizar bibliotecas propietarias que no están disponibles en otros sistemas operativos como Linux.
C y la administración de las tareas del sistema.
Una de las características que tenemos en
sistemas GNU/Linux es la de programar scripts para facilitarnos la administración
de tareas. Esos lenguajes de scripts, si bien son muy potentes e interpretados,
tales como el bash o python, no llegan a tener toda la potencia de un lenguaje
compilado como C/C++.
Es por ello que quien puede programar en C podrá, además, escribir sus propias utilidades, simples o complejas, y ejecutarlas como aplicaciones gráficas o como comandos en el sistema, y de esta forma portar esas utilidades de un sistema Linux a otro y continuar utilizándolas.
Incluso podrá además empaquetar toda su aplicación en un tarball fuente, o código pre-compilado para algún repositorio de distribución, como .deb o .rpm.
Y por supuesto, también podrá licenciar su código fuente como GPL o alguna licencia libre, y compartirlo con el resto de la comunidad, y de esta forma obtener aportes retro alimentados o feedback de programadores más experimentados, lo que logrará sin duda que el código aportado crezca mucho más de lo imaginado.
Es por ello que quien puede programar en C podrá, además, escribir sus propias utilidades, simples o complejas, y ejecutarlas como aplicaciones gráficas o como comandos en el sistema, y de esta forma portar esas utilidades de un sistema Linux a otro y continuar utilizándolas.
Incluso podrá además empaquetar toda su aplicación en un tarball fuente, o código pre-compilado para algún repositorio de distribución, como .deb o .rpm.
Y por supuesto, también podrá licenciar su código fuente como GPL o alguna licencia libre, y compartirlo con el resto de la comunidad, y de esta forma obtener aportes retro alimentados o feedback de programadores más experimentados, lo que logrará sin duda que el código aportado crezca mucho más de lo imaginado.
C y sus posibilidades en el mundo Unix
Por si no lo sabes, el kernel Linux, y el sistema
operativo GNU están casi en su totalidad escritos en C y en C++. Muchas de las
aplicaciones que utilizamos todo el tiempo son códigos fuente C/C++ compilados
para Linux en formato ELF, lo que significa que quien programe en C/C++ tiene
muchísimas posibilidades a la hora de optimizar y personalizar en medio/bajo
nivel su sistema operativo, e incluso escribir nuevos controladores, módulos y
software para facilitarle la tarea de administración.
Además, y particularmente en sistemas GNU/Linux, podremos utilizar el lenguaje C del estándar ANSI C para programar diversos mecanismos de comunicación de procesos UNIX, también conocidos como IPC (Inter-Proccess Communication), lo que le permitirá al programador administrar diversas características del manejo de procesos del sistema, como ser, por ejemplo:
Además, y particularmente en sistemas GNU/Linux, podremos utilizar el lenguaje C del estándar ANSI C para programar diversos mecanismos de comunicación de procesos UNIX, también conocidos como IPC (Inter-Proccess Communication), lo que le permitirá al programador administrar diversas características del manejo de procesos del sistema, como ser, por ejemplo:
-
Gestión de prioridades
de planificación.
-
Envío y recepción de
señales entre procesos.
-
Generación de segmentos
de memoria compartida.
-
Mecanismos de envío de
información entre procesos mediante pipes o tuberías.
-
Envío de información
mediante named-pipes, o FIFOs.
-
Envío de información
utilizando colas de mensajes.
-
Envío de información
entre procesos locales mediante sockets de familia UNIX.
-
Envío de información
entre procesos locales o remotos mediante sockets de familia INET.
-
Control de acceso a
recursos mediante semáforos.