PDF de programación - Tema 2 - Programación básica en entorno UNIX

Imágen de pdf Tema 2 - Programación básica en entorno UNIX

Tema 2 - Programación básica en entorno UNIXgráfica de visualizaciones

Actualizado el 26 de Octubre del 2020 (Publicado el 23 de Febrero del 2018)
1.069 visualizaciones desde el 23 de Febrero del 2018
801,9 KB
19 paginas
Creado hace 17a (17/10/2006)
Tema 2 : entorno programación linux

Sistemas Operativos:
Programación de Sistemas

Oscar Déniz Suárez
Alexis Quesada Arencibia
Francisco J. Santana Pérez

Curso 2006-07

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

1

Programación C en UNIX

(cid:1) Repasen el lenguaje C y fundamentos de UNIX

(cid:1) asignatura Sistemas Operativos

(cid:1) No necesitamos usar C++, ni otros

refinamientos, pero si quieren pueden usar...
(cid:1) C++ sencillo
(cid:1) la librería ncurses

(cid:1) Deben dar preferencia al uso de llamadas al

sistema

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

2

La función main

(cid:1) Función de entrada al programa C

int main(int argc, char *argv[]);
(cid:1) Una rutina especial de arranque es

llamada por el Kernel:

• La rutina es insertada en el ejecutable en el

proceso de linkado

• La rutina se encarga de tomar del Kernel los

parámetros y el entorno

• Y llama a la función main

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

3

Manejo de errores

(cid:1) En caso de error: Las llamadas al sistema

devuelven -1 ó NULL (si la función devuelve
tipo puntero)

(cid:1) Deben siempre comprobar después de una
llamada si todo es correcto, para ello Linux
proporciona una variable errno y una función
perror():

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

4

Manejo de errores

Ejemplo de programa, del uso de la variable global errno y del

procedimiento perror()

/* errores.c: lista los 53 primeros errores de llamadas al sistema */
# include <stdio.h>
main(argc,argv)
int argc;
char *argv[];
{
int i;
extern int errno;
for (i=0;i<=53;i++){
fprintf(stderr,"%3d",i);
errno=i;
perror(" ");
}
exit(0);
}

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

5

Terminación de procesos

(cid:1) Un proceso puede terminar de 5 formas:

(cid:1) Normalmente:

• retornando de main (con return ó llegando al

final)

• llamando exit
• llamando _exit
(cid:1) Anormalmente:
• llamando abort
• terminado por una señal

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

6

Terminación de procesos

(cid:1) _exit vuelve al kernel inmediatamente. Definida

por POSIX

#include <unistd.h>
void _exit(int status);

(cid:1) exit realiza antes cierto “limpiado” (p.ej.

terminar de escribir los buffers a disco). Es
ANSI C

#include <stdlib.h>
void exit(int status);

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

7

Terminación de procesos

(cid:1) Las funciones exit y return pueden devolver un código de retorno
(cid:1) El shell puede utilizar el código de retorno:

% ls /
bin coda etc lib misc nfs proc sbin usr
boot dev home lost+found mnt opt root tmp var
% echo $?
0
% ls fichero_no_existente
ls: fichero_no_existente: No such file or directory
% echo $?
1

(cid:1) Código de retorno 0 = terminación correcta

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

8

Terminación de procesos

(cid:1) Con ANSI C un proceso puede registrar

hasta 32 funciones que se llamarán
automáticamente por exit

(cid:1) La función atexit:
#include <stdlib.h>
int atexit(void (*func) (void));

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

9

Argumentos de línea de comando

int main(int argc, char *argv[])
{

int i;
for (i=0; i<argc; i++)

printf(“argv[%d]: %s\n”, i, argv[i]);

exit(0);

}

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

10

Variables de entorno

(cid:1) Además de los parámetros, a un programa que

comienza se le pasa la lista de variables de
entorno.

(cid:1) La lista es heredada del programa lanzador
(cid:1) Es un array de punteros a cadenas terminadas

en nulo (\0)

extern char **environ;

(cid:1) Las cadenas son de la forma variable=valor

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

11

Variables de entorno

(cid:1) Probar env en la línea de comandos.

(cid:1) Podemos manimupar las variables de

entorno desde el shell con los comandos:
(cid:1) export PATH= …..
(cid:1) echo $PATH

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

12

Variables de entorno
desde programas

#include <stdio.h>
/* The ENVIRON variable contains the environment. */

extern char** environ;

int main ()
{
char** var;
for (var = environ; *var != NULL; ++var)

printf (“%s\n”, *var);

return 0;
}

(cid:1) ANSI C define una función útil:

char *getenv(const char *name)

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

13

Estructura en memoria de un programa C
Direcciones altas

parámetros y entorno

pila

heap

datos no inicializados

exec los pone a 0

datos inicializados

Direcciones bajas

código

Leídos de
disco por exec

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

14

Codificación prudente: assert

(cid:1) assert(condición)
(cid:1) Para obviarlos se puede compilar

definiendo la macro NDEBUG (opción
–DNDEBUG del compilador)

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

15

Fallos de las llamadas al sistema

(cid:1) Las llamadas al sistema podrán fallar por:

(cid:1) Argumentos de la llamada inválidos
(cid:1) Recursos agotados (p.ej. no hay memoria o disco

suficiente)

(cid:1) Acceso no permitido (p.ej. al intentar escribir un

fichero para el que no tenemos permiso)

(cid:1) Fallo hardware
(cid:1) Interrupción por una señal

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

16

La librería ncurses

(cid:1) Trabaja con el concepto de ventana
(cid:1) Uso:

$ gcc curses_prog.c -o curses_prog –lcurses

(cid:1) Estructura general:

#include <curses.h>
main()
{

initscr();

/* cuerpo */

endwin();
exit(0);

}

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

17

La librería ncurses

(cid:1) Facilidades para:

(cid:1) Escritura en una posición de pantalla
(cid:1) Colores, atributos
(cid:1) Líneas horizontales y verticales
(cid:1) Cajas
(cid:1) Scrolling
(cid:1) Manejo de Ratón
(cid:1) ...

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

18

¿y a partir de ahora?

(cid:1) Haremos un recorrido por los servicios básicos

que proporciona el sistema operativo para:

(cid:1) Procesos
(cid:1) Señales
(cid:1) Comunicación y sincronización de procesos
(cid:1) Memoria
(cid:1) Entrada/salida, ficheros
(cid:1) Manejadores de dispositivos

Óscar Déniz / Alexis Quesada /

Francisco J. Santana

19
  • Links de descarga
http://lwp-l.com/pdf9009

Comentarios de: Tema 2 - Programación básica en entorno UNIX (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