PDF de programación - Curso Programación Linux - Introducción

Imágen de pdf Curso Programación Linux - Introducción

Curso Programación Linux - Introduccióngráfica de visualizaciones

Publicado el 17 de Diciembre del 2020
567 visualizaciones desde el 17 de Diciembre del 2020
888,1 KB
48 paginas
Creado hace 16a (20/02/2008)
Curso Programación Linux

Jose A. Espinosa

Indice

● AREA 1: Programación Linux
● AREA 2: Optimización
● AREA 3: El núcleo

AREA 1: Programación Linux

● Introducción
● Entornos de programación
● Multitarea, multihilo
● Programación gráfica
● Intercomunicación
● Compilación cruzada

Introducción

25 de agosto de 1991, 20:57:08 GMT comp.os.minix

Hello everybody out there using minix -

I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready. I'd like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things).

I've currently ported bash(1.08) and gcc(1.40), and things seem to
work. This implies that I'll get something practical within a few
months, and I'd like to know what features most people would want.
Any suggestions are welcome, but I won't promise I'll implement them
:-)

Linus Benedict Torvalds ([email protected])

PS. Yes – it's free of any minix code, and it has a multi-threaded
fs. It is NOT portable (uses 386 task switching etc), and it probably
never will support anything other than AT-harddisks, as that's all I
have :-(.

Y al principio fue UNIX...

● Sistema operativo
● Portable
● Multiusuario
● Multitarea
● 99% escrito en c

De UNIX a Linux

● 1966: MULTICS
● 1973: Porting a C del núcleo de UNIX
● 1982: System III (primer unix comercial)
● 1983: System V
● 1987: Minix
● 1990: IEEE 1003 : POSIX.1
● 1991: Linux

Prehistoria Linux

Y Linux es...

Arquitectura Básica

¿Qué es una distribución?

● Selección de paquetes que acompañan a

una cierta versión del núcleo linux

● Un sistema de paquetes (rpm, deb, etc.)
● Unos repositorios de paquetes
● Unas políticas de mantenimiento y

actualización.

● Unas plataformas hw soportadas
● OBJETIVO: facilidad de instalación y

mantenimiento

Distribuciones

Compilación en Unix

● Editores
● Compiladores
● Utilidades
● Entornos

Editores

● Empecemos por lo básico: vi
● Está presente en todos los unix (o variantes)
● Es independiente del terminal
● Existente en unix desde 1983 (Unix System

V)

● Se controla exclusivamente con el teclado
● Pero... Hay que aprender los comandos

vi

● Modo Texto

ESC

● Modo Comando

Insertar antes del cursor.
Insertar al principio de la línea.
Añadir después del cursor.
Añadir al final de la línea.
Abrir línea debajo de la actual.
Abrir línea encima de la actual.
Sobreescribir (cambiar) texto.
Sobreescribir el carácter sobre el que
Reemplaza caracteres.

i
I
a
A
o
O
R
r
está el cursor.
c
cw Reemplaza palabras.
C, c$
Reemplaza hasta el fin de línea.
c0 Reemplaza desde el comienzo de línea.

Mover en distintas direcciones.
Una posición hacia la izquierda.
Una posición hacia la derecha.

Una línea hacia arriba.
Una línea hacia abajo.

flechas
h ó BS
l ó SP
k ó -
j ó +
$
0 (Cero) Principio de línea.
1G
G
18G
Ctrl-G
w
e
E
de espacio.
b
^
%
H
L
M
23|
Ctrl-f
Ctrl-b
Ctrl-l
Ctrl-d
Ctrl-u

Fin de línea.
Comienzo del archivo.
Fin del archivo.
Línea número 18.
Mostrar número de línea actual.
Comienzo de la palabra siguiente.
Fin de la palabra siguiente.
Fin de la palabra siguiente antes
Principio de la palabra anterior.
Primera palabra de la línea.
Hasta el paréntesis que aparea.
Parte superior de la pantalla.
Parte inferior de la pantalla.
Al medio de la pantalla.
Cursor a la columna 23.
Una pantalla adelante.
Una pantalla atrás.
Refrescar la pantalla.
Media pantalla adelante.
Media pantalla atrás.

vi

● Modo EX

Salir si no hubo cambios.
:q
Salir sin guardar cambios.
:q!
Guardar cambios.
:w
:w arch1 Guardar cambios en archivo arch1.
Guardar cambios y salir.
:wq
:r arch2 Insertar un archivo.
:e arch2 Editar un nuevo archivo.
:e! arch2 Idem sin salvar anterior.
:r! comdo Insertar salida de comando.
:shell
:.=
se halla en cursor.

Salir al shell (vuelve con exit).
Muestra el número de línea en que

● Mover

:1
Mueve a línea 1.
:15 Mueve a línea 15.
Mueve a última línea.
:$

● Busqueda

/str Buscar hacia adelante cadena 'str'.
?str Buscar hacia atrás cadena de 'str'.
n
se usó ?).
N
se usó ?).
fc
Fc
tc
Tc
;
,
inverso.

Buscar siguiente (si se usó /) o anterior (si
Buscar anterior (si se usó /) o siguiente (si
Buscar el siguiente carácter 'c' en la línea.
Buscar el anterior carácter 'c' en la línea.
Ir al carácter anterior al siguiente 'c'.
Ir al carácter posterior al precedente 'c'.
Repetir el último comando f, F, t, o T.
último comando f, F, t, o T en sentido

gcc

● GNU Compiler collection
● Front ends para distintos lenguajes:

– Ada
– C
– C++
– Fortran
– Java
– Objective-c / c++

A compilar...

● Crear un programa en c hola.c que saque

por pantalla la famosa: “hola mundo”
(usando el vi, p.ej.)

● Ejecutar el comando de compilación

– gcc hola.c

● Ejecutar el resultado

– ./a.out

● Si queremos que nos lo saque con otro

nombre:
– gcc hola.c -o hola

Ejemplo 2

● Escribir un programa en c que calcule y nos

imprima la raiz cuadrada de 25. Llamarlo
hello2.c

● Compilarlo...
● ...
● ¿Que ha fallado?
● Probar gcc -lm hello2.c

Las librerías

● En linux las librerías dinámicas se

encuentran en /usr/lib, /lib

● Se pueden especificar otras librerías por su

camino completo

● Se puede definir dónde encontrar las

librerías con LDD_LIBRARY_PATH

● Comando ldd para conocer las librerías de

las que depende

El ciclo de compilación

● Preprocesado

– gcc -E archivo.c

● Compilado

– gcc -c archivo.c

● Ensamblado

– gcc -S archivo.c

● Linkado

– gcc

Proyectos compuestos

● Dependencias
● Make
● IMake
● Autoconf

Dependencias

● Un proyecto puede tener

múltiples archivos, con
dependencias de archivos de
cabecera, librerías o archivos de
configuración

● Es altamente ineficiente

recompilar todos los archivos
cada vez que modificamos alguno

● Para evitarlo existen las
herramientas como make

make

● El comando make es un sistema para
construir codigo compilado, aunque se
puede utilizar para más cosas

● make necesita un archivo de configuracion

Makefile

● Se puede cambiar el archivo con la opción -f
● Un archivo Makefile se compone de reglas

objetivo: prerequisitos
comandos

Ejemplo Makefile

# Lincado
sample: main.o example.o

cc -o sample main.o example.o
echo sample: make complete

# Compilar las fuentes
main.o: main.c main.h
example.o: example.c defs.h

cc -c main.c
cc -c example.c

Distintos objetivos

# Objetivo principal
.PHONY: clean install
# Eliminar ejecutable y objetos
clean:
rm sample main.o example.o
echo clean: make complete

# Instalar el producto final
install:

cp sample /usr/local
echo install: make complete

Uso de variables

# archivos objeto
objects = main.o example.o
# Lincar objetos
sample: $(objects)

cc -o sample $(objects)
echo sample: make complete

# Compilar fuentes
main.o: main.c main.h
cc -c main.c
example.o: example.c defs.h
cc -c example.c

# Eliminar ejecutables y objetos
clean:

rm sample $(objects)
echo clean: make complete

Toques finales

# Compilador:
CC=gcc
objects = main.o example.o
# Regla por defecto
all:

sample
echo all: complatada a compilacion

sample: $(objects)
$(CC) -o $@ $+

# Regla general para compilar los .c a .o:
%.o:%.c

$(CC) -c $+

#Nos aseguramos de recompilar si cambian las cabeceras:
main.o: main.h defs.h
example.o: example.h defs.h

Vuestro turno

● Crear un programa que use 2 archivos

fuente y 2 archivos de cabecera

● Crear un archivo makefile para compilarlos
● Ejecutar el makefile varias veces (make)

modificando los archivos de uno en uno para
ver su efecto.

Más problemas

● Con make se pueden resolver dependencias

dentro de una plataforma

● ¿Cómo se resuelven dependencias para

compilar en varias plataformas?
● Característica de UNIX : portable
● Primer gran proyecto en experimentar el

problema: X-Windows

X-Windows

● A diferencia de ms-windows, el sistema
gráfico de UNIX no es parte del núcleo
● Utiliza un sistema cliente-servidor y el

paradigma de DISPLAY

● Las pantallas se pueden compartir para que

los clientes ejecuten aplicaciones en ellas.

● Los clientes y servidores son independientes

de la plataforma y compatibles.

X e Imake

● X window requería su compilación en

múltiples plataformas

● La complejidad del código y su extensión

hacían muy dificil mantener makefiles para
cada combinación de plataforma-hardware

● Se desarrolla imake para permitir compilar el
código de X-Window de la misma manera en
todas las plataformas

Funcionamiento Imake

● Ejemplo... ver fuentes

GNU Build System

● Desarrollado casi al tiempo que imake
● Pretende descentralizar el desarrollo de

configuraciones para distintas plataformas

● Conocido por autotools
● Comprende:

– Autoconf
– Automake
– Libtool

Autoconf

● Procesa los archivos configure.in o

configure.ac

● Genera un script llamado configure
● Está diseñado para ntentar salvar las
diferencias que existen entre distintos
sabores de Unix

● Autoconf incluye la herramienta Autoheader

que se usa para manejar los archivos de
cabecera de C.

Automake

● ayuda a crear archivos Makefile portables
● Toma como entrada un archivo Makefile.am

y lo transforma en un Makefile.in.

● Este, a su vez, es utilizado por Autoconf

para generar el archivo Makefile final.

Libtool

● Libtool ayuda a crear librerías estáticas y

dinámicas para varios Sistemas Operativos
Unix.

● Libtool abstrae el proceso de creación de las

librerías ocultando las diferencias entre los
distintos sistemas (entre GNU/Linux y Solaris
por ejemplo).

Proceso

Ejemplo – Autoconf I

● Creamos un directorio para nuestras fuentes

con esta estructura:

● hello
– src

● hello.c
● hello.h

Ejemplo – Autoconf II

● Creamos en hello el archivo

– Makefile.am

● Contenido:

– SUBDIRS=src

● Esto le indica los subdirectorios a los que ha

de bajar

Ejemplo – Autoconf III

● En el dir
  • Links de descarga
http://lwp-l.com/pdf18570

Comentarios de: Curso Programación Linux - Introducción (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad