sistemas operativosrusman/docencia/so/resumen c.pdf · sistemas operativos 04/04/2005 tema 3:...

41
Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga E.T.I. Informática Gestión Sistemas Operativos Sistemas Operativos Curso 2004/2005 Curso 2004/2005 Revisión de ANSI C Profesor: Francisco Rus Mansilla 2 SO - ANSI C Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga ANSI C (Revisi ANSI C (Revisió n) n) Introducción a Ansi C Variables, operadores y expresiones Control de flujo Arrays y cadenas de caracteres • Funciones Estructuras y Uniones • Punteros El pre-procesador de C Programación modular en ANSI-C C, UNIX y las bibliotecas de funciones

Upload: others

Post on 14-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 1

Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

E.T.I. Informática Gestión

Sistemas OperativosSistemas Operativos

Curso 2004/2005Curso 2004/2005

Revisión de ANSI C

Profesor: Francisco Rus Mansilla

2

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ANSI C (RevisiANSI C (Revisióón)n)

• Introducción a Ansi C• Variables, operadores y expresiones• Control de flujo• Arrays y cadenas de caracteres• Funciones• Estructuras y Uniones• Punteros• El pre-procesador de C• Programación modular en ANSI-C• C, UNIX y las bibliotecas de funciones

Page 2: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 2

3

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

IntroducciIntroduccióón a n a AnsiAnsi CC

• Pequeño tamaño• Uso de funciones de librería• Lenguaje estructurado• Propósito general y prog. Sistemas• Poco tipado, inseguro• Bajo nivel , operaciones de bits y punteros

CaracterCaracteríísticassticas

4

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

IntroducciIntroduccióón a n a AnsiAnsi CC

• Construcciones de alto nivel• Manejo de tareas de bajo nivel• Programas eficientes• Compiladores para múltiples plataformas

CaracterCaracteríísticassticas

Page 3: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 3

5

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

IntroducciIntroduccióón a n a AnsiAnsi CC

• C se diseñó para implementar UNIX• Comandos escritos en C• Las funciones de librería para acceso al sistema

se usan mejor desde C

UNIX y CUNIX y C

6

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

IntroducciIntroduccióón a n a AnsiAnsi CC

• Un programa C contiene– Ordenes para el preprocesador– Definiciones de tipos– Prototipos para funciones– Variables – Funciones– Una función especial main()

Estructura de un programaEstructura de un programa

Page 4: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 4

7

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Estructura bEstructura báásica sica

EjemploEjemplo/* Convierte de Celcius a Fahrenheit */#include <stdio.h>main(){/* Declaraciones */

float celsius;float fahrenheit;

/* Peticion de la entrada al usuario */printf( "Type a number: ");scanf( "%f", &celsius);

/* Calculo del resultado */fahrenheit = celsius * 9 / 5.0 + 32;

/* Impresion del resultado */printf( "Celsius: %5.1f, Fahr: %5.1f\n",

celsius, fahrenheit);exit( 0 );

} /* fin del programa */

E/S

LIBRERÍAS

8

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Estructura bEstructura báásica sica EjemploEjemplo

• Copia la entrada en la salida• La entrada puede ser con buffer• Puede redireccionarse la entrada y salida

#include <stdio.h>

int main(void){

int c;

c = getchar();while ( c!= EOF ) {

putchar(c);c = getchar();

}}

Page 5: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 5

9

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Estructura bEstructura báásica sica EjemploEjemplo

• Cualquier expresión tiene un valor, y puede usarse en otras expresiones

#include <stdio.h>

int main(void){

int c;

while ( (c = getchar()) != EOF ) {putchar(c);

}}

10

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Estructura bEstructura báásica sica EjemploEjemplo

• Las notaciones n++, ++n, n-- y --n incrementan y disminuyen en 1

#include <stdio.h>

int main(void){

int nc;

nc = 0;while (getchar() != EOF )

nc++;printf(“%ld\n”, nc);

}

Page 6: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 6

11

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

CompilaciCompilacióónn

• Modelo de compilación• Compiladores• Ejecución

Temas a tratar ...Temas a tratar ...

12

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

CompilaciCompilacióónnModelo de compilaciModelo de compilacióónn

Preprocesador

Compilador

Ensamblador

Editor de enlace

ejecutable

fuente

librerías

Page 7: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 7

13

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

CompilaciCompilacióónn

• Los mas frecuentes: cc gcc– cc -o ejecutable fuente.c– gcc -o ejecutable fuente.c – gcc fuente.c

CompiladorCompilador

14

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

CompilaciCompilacióónnCompiladorCompilador

Page 8: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 8

15

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

CompilaciCompilacióónnEjecuciEjecucióónn

16

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

EJERCICIOSEJERCICIOSIntroducciIntroduccióón n

1.1 Escribir un programa que copie la entrada en la salida, sustituyendo cada cadena de espacios en blanco por un único espacio en blanco.

1.2 Escribir un programa que elimine los espacios en blanco y tabuladores al final de cada línea, y que borre las líneas en blanco.

1.3 Escribir una función reverse(s) que invierta una cadena de caracteres s.

1.4 Escribir un programa que elimine todos los comentarios de unprograma C.

Page 9: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 9

17

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Variables y OperadoresVariables y Operadores

• Tipos de datos• Declaración de variables• Variables locales, globales, externas y estáticas.

Ámbitos. • Operadores aritméticos, relaciones y lógicos• Operadores de asignación• Expresiones condicionales• Precedencia de operadores• Conversión de tipos

Temas a tratar ...Temas a tratar ...

18

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Variables y OperadoresVariables y OperadoresTipos de datos bTipos de datos báásicossicos

arraysshort

campo de bit

punterodouble

enumerados long int

unionesfloat

estructurasint, unsigned int

voidchar, unsigned char

OtrosBásicos

Page 10: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 10

19

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Variables y OperadoresVariables y OperadoresTamaTamañños de lo tipos de datosos de lo tipos de datos

#include <stdio.h>#include <limits.h>

int main (){printf("Size of Char %d\n", CHAR_BIT);printf("Size of Char Max %d\n", CHAR_MAX);printf("Size of Char Min %d\n", CHAR_MIN);printf("Size of int min %d\n", INT_MIN);printf("Size of int max %d\n", INT_MAX);printf("Size of long min %d\n", LONG_MIN);printf("Size of long max %d\n", LONG_MAX);printf("Size of short min %d\n", SHRT_MIN);printf("Size of short max %d\n", SHRT_MAX);printf("Size of unsigned char %d\n", UCHAR_MAX);printf("Size of unsigned long %d\n", ULONG_MAX);printf("Size of unsigned int %d\n", UINT_MAX);printf("Size of unsigned short %d\n", USHRT_MAX);

return 0;}

20

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Variables y OperadoresVariables y Operadores

Tipo Variable1, Variable2;

int entero;char caracter, c1, c2;enum Color { Verde, Amarillo, Rojo };

Declaraciones de variablesDeclaraciones de variables

• Nombres de variables: – letra + letras y dígitos– Distinción entre mayúsculas y minúsculas

• Declaraciones

Page 11: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 11

21

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Variables y OperadoresVariables y Operadores

• Locales: declaradas dentro de una función• Globales: declaradas fuera de funciones• Externas: declaradas en otro módulo• Estáticas: no se eliminan hasta el final de la

ejecución, privadas• Tipo de almacenamiento y tipo de acceso:

– auto, register, static, extern, const, volatile

Atributos de las variablesAtributos de las variables

22

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Variables y OperadoresVariables y Operadores

• Aritméticos– Binarios

• + , -, *, /, %

• Relacionales– Los de mas precedencia

• > , >=, <, <=– Los de menos precedencia

• ==, !=

• Lógicos• &&, ||

• Manejo de bits• & | ^ << >> ~

OperadoresOperadores

Page 12: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 12

23

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

• Variable operador = expresionX *= y +1X = x * (y +1)

/* cuenta los bits 1 en x */int bitcount(unsigned x){

int b;

for (b = 0; x != 0; x &= (x-1))b++;

return b;}

Variables y OperadoresVariables y OperadoresOperadores de asignaciOperadores de asignacióónn

24

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Precedencia y orden de evaluaciPrecedencia y orden de evaluacióónn

Variables y OperadoresVariables y Operadores

Izquierda a derecha,

Derecha a izquierda= += -= *= /= %= &= ^= |= <<= >>=

Derecha a izquierda?:

Izquierda a derecha||

Izquierda a derecha&&Izquierda a derecha|

Izquierda a derecha^

Izquierda a derecha&

Izquierda a derecha== !=

Izquierda a derecha< <= > >=

Izquierda a derecha<< >>Izquierda a derecha* / %

Derecha a izquierda! ~ ++ -- + - * & (tipo) sizeof

Izquierda a derecha() [] ->

Orden de evaluaciónOperadores

Page 13: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 13

25

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Conversiones de tipoConversiones de tipo

• Conversión implícita en argumentos de funciones• Conversión explícita con el operador “cast”

– Variable = (tipo) expresión

Variables y OperadoresVariables y Operadores

26

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

EJERCICIOSEJERCICIOSVariables, operadores Variables, operadores

2.1 Escribir una función mi_htoi(s) que devuelva el entero equivalente a una cadena de dígitos hexadecimales.

2.2 Escribir la funcion lower que convierte de mayusculas a minúculas usando la expresión condicinal.

Page 14: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 14

27

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujo

• Bloques de Instrucciones• Instrucciones de Selección

– Sentencia if– Sentencia switch

• Bucles– Sentencia for– Sentencia while– Sentencia do-while– Sentencias break, continue y goto

Temas a tratar ...Temas a tratar ...

28

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujo

• Instrucción o proposición simpleSentencia ;

• Bloque de instrucciones{

Sentencia1 ;Sentencia2 ;....SentenciaN ;

}

• El bloque puede contener declaraciones de variables

Bloques de instruccionesBloques de instrucciones

Page 15: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 15

29

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujo

• Se emplea para expresar decisiones

if (expresión)Sentencia1 ;

else Sentencia2 ;

if (expresión)Bloque1

else Bloque2

SelecciSeleccióón n ifif

30

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujoSelecciSeleccióón n ifif

/* Imprime el area a partir del radio*/

#define Pi 3.14159

main() {

float radius;

printf( "Type a radius: ");scanf( "%f", &radius );

if ( radius < 0 ) {printf( "Error: Negative values not permitted\n" );

} else {printf( "Radius is %5.2f, area is %5.2f\n",radius,Pi * radius *

radius);}exit( 0 );

}

Page 16: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 16

31

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujo

• Se emplea para expresar decisiones múltiples• Cada case se anota con uno o varios valores

constantes

switch (expresión) {case exp-cont: Sentenciascase exp-cont: Sentencias case exp-cont: Sentencias ......default : Sentencias

}

SelecciSeleccióón n switchswitch

32

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujoSelecciSeleccióón n switchswitch

main (){ int month;

printf ( "Type the number of a month: " );scanf ( "%d", &month );printf( "\nName of month %d is ", month );switch ( month ) {case 1: printf ( "January" ); break;case 2: printf ( "February" ); break;case 3: printf ( "March" ); break;case 4: printf ( "April" ); break;case 5: printf ( "May" ); break;case 6: printf ( "June" ); break;case 7: printf ( "July" ); break;case 8: printf ( "August" ); break;case 9: printf ( "September" ); break;case 10: printf ( "October" ); break;case 11: printf ( "November" ); break;case 12: printf ( "Devember" ); break;default: printf ( "Unknown" );

}putchar ( '\n' );

}

Page 17: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 17

33

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujo

• La expresión se evalúa antes de ejecutar el cuerpo• Para continuar, expresión debe ser distinto de

cero

while (expresión)sentencia;

while (expresión)bloque

while (expresión);

Bucle Bucle whilewhile

34

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujo

for (expr1; expr2; expr3)sentencia; ó bloque

equivale a

expr1;while (expr2){

sentencia; ó bloqueexpr3

};

Bucle Bucle forfor

Page 18: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 18

35

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujoBucle Bucle forfor

#include <stdio.h>

main(){ float in, sum = 0.0,

max = -1000000.0, min = 1000000.0; int i;

for (i=0;i<10;++i){ printf("Enter number %d: \n", i+1);

scanf("%f",&in);

if ( max < in )max = in; /* in is current largest */

if ( min > in )min = in; /* in is current smallest */

sum += in;}

printf("\nLargest = %10.3f, Smallest = %10.3f, Average %10.3f\n", max, min, sum / 10.0);

exit(0);}

36

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujo

• expr1 y expr3 pueden ser compuestas

for (expr1; expr2; expr3)sentencia; ó bloque

Bucle Bucle forfor

void reverse(char s[]){

int c, i, j;

for (i=0, j = strlen(s)-1; i<j; i++, j--){

c = s[i];s[i] = s[j];s[j] = c;

}}

Page 19: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 19

37

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujo

• La expresión se evalúa después de ejecutar

dosentencia; ó bloque;

while (expresión);

Bucle doBucle do--whilewhile

void itoa(int n, char s[]) {int i, sign;sign = n;

i = 0;do {

s[i++] = abs(n % 10) + '0';} while ( n /= 10 );if (sign < 0)

s[i++] = '-'; s[i] = '\0';reverse(s);

}

38

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Control de flujoControl de flujo

• break sale de una rama de switch o del bucle for , while ódo más interno

• continue corta la iteración de un bucle e inicia una nueva

breakbreak y y continuecontinue

int trim(char s[]) {int n;sign = n;

for(n = strlen(s)-1; n >= 0; n--)if(s[n] != ‘ ‘ && s[n] != ‘\t’ && s[n] != ‘\n’)break;

s[n+1] = ‘\0’;return(n);}

Page 20: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 20

39

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

EJERCICIOSEJERCICIOSControl de flujoControl de flujo

3.1 Escribir la función expand(s1, s2) que expanda la notación abreviada a-z, indicada en la cadena s1, en una lista completa abc ..xyz en s2.

3.2 Escribir una función itob(n,s,b) que convierte el entero n en y una cadena s que representa al numero en base b.

3.3 Escribir una funcion itoa(n, l, s) que convierte el numero entero n en una cadena de caracteres de longitud l (insertando blancos por la izquierda hasta completar la longitud).

40

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ArraysArrays y cadenas de caracteresy cadenas de caracteres

• Declaracióntipo nombre[tamaño];

• Acceso a un elementonombre[índice]

• índice varía de 0 a tamaño – 1• La asignación de arrays completos es Ilegal !!• Inicialización

tipo nombre[] = {const, const, .. const};

ArraysArrays unidimensionalesunidimensionales

Page 21: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 21

41

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ArraysArrays y cadenas de caracteresy cadenas de caracteresArraysArrays unidimensionalesunidimensionales

#include <stdio.h>main()

{ int arr[10]; int i; /* indice del array */int in;

for (i=0;i<10;++i) arr[i] = i; /* inicializacion con valores*/

for (i=0;i<10;++i) printf("%d ", arr[i]); /* impresion del array */

printf("Enter number to be searched for:\n"); scanf("%d", &in);

i=0;while ( (i < 10) && ( arr[i++] != in) );

if ( i == 10 )printf("Number %d not found in array\n", in);

elseprintf("Number %d found at array location %d\n", in, i-1);

}

42

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ArraysArrays y cadenas de caracteresy cadenas de caracteres

• Declaración como arrayschar nombre[tamaño];

• Acceso como array y con funciones especiales• Almacenamiento con un terminador ‘\0’, que ocupa

una posición

• Inicialización char cadena[] = {‘u’, ‘n’, ‘o’, ‘\0’};char cadena[] = {“uno”};

Cadenas de caracteresCadenas de caracteres

\0etnatsnocanu

Page 22: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 22

43

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ArraysArrays y cadenas de caracteresy cadenas de caracteresCadenas de caracteresCadenas de caracteres

#include <stdio.h>#define MAXLINE 1000 int getline(char line[], int maxline);void copy(char to[], char from[]);

int main(void){ int len; /* loingutud de la linea actual */int max=0; /* maxima longitud actual */char line[MAXLINE]; /* linea actual*/char longest[MAXLINE]; /* linea mas larga */

while((len = getline(line, MAXLINE)) > 0){printf("%d: %s", len, line);if(len > max){max = len;copy(longest, line);

}}if(max > 0)

printf("Longest is %d characters:\n%s", max, longest);printf("\n");

}

44

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ArraysArrays y cadenas de caracteresy cadenas de caracteresCadenas de caracteresCadenas de caracteres

/* copy: copia una cadena de caracteres en otra */void copy(char to[], char from[]){

int i;

i = 0;while((to[i] = from[i]) != '\0'){++i;

}}

Page 23: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 23

45

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ArraysArrays y cadenas de caracteresy cadenas de caracteres

• Declaracióntipo nombre[tamaño1][tamaño2][tamaño3][tamaño4];

• Acceso a un elementonombre[índice1][índice2][índice3][índice4]

• Inicializacióntipo nombre[][] =

{{const, const, .. const},{const, const, .. const}}

ArraysArrays multidimensionalesmultidimensionales

46

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

FuncionesFunciones

• En C se usan como funciones y procedimientos• Todas se definen como globales, sin anidamiento

DeclaraciDeclaracióón de funcionesn de funciones

tipo_devuelto nombre(par1, par2, ..)

{

variables locales

cuerpo

}

Page 24: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 24

47

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

FuncionesFunciones

• Pueden devolver cualquier tipo– excepto tipos función o arrays– si no se especifica, devuelve int– proposición return devuelve el valor– void para “procedimientos”

• Se necesita una definición o declaración antes de usarlas,

DeclaraciDeclaracióón de funcionesn de funciones

tipo_devuelto nombre(tipo_par1, tipo_par2, ..);

48

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

FuncionesFunciones

• Los parámetros son de cualquier tipo• Los parámetros se pasan por valor

– excepto los arrays– se realizan conversiones automáticas de tipo

• Almacenamiento automático para parámetros y variables locales

• Posibilidad de declarar variables locales como estáticas

DeclaraciDeclaracióón de funcionesn de funciones

Page 25: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 25

49

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

FuncionesFunciones

• Las funciones ya disponibles y las que se creen en otros ficheros deben declararse para utilizarlas

• Declaraciones agrupadas en ficheros .h– Entrada/salida <stdio.h>– Manipulación de cadenas <string.h>– Funciones matemáticas <math.h>

• La notacion < > indica que se encuentran en directorios estándar

Ficheros de cabecerasFicheros de cabeceras

50

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

FuncionesFunciones

• Las variables no pueden devolver arrays• Los arrays como parámetros se tratan por

referencia– Pueden pasarse como arrays abiertos– Sólo puede dejarse abierta la primera dimensión

Funciones y Funciones y arraysarrays

Page 26: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 26

51

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Estructuras y unionesEstructuras y uniones

• Una estructura es una colección de variables (incluidas estructuras)

• En ANSI-C, una estructura puede utilizarse como una variable (asignación, paso como parámetro, valor de vuelta de una función)

• Las estructuras no se pueden comparar

DefiniciDefinicióón de estructurasn de estructuras

struct nombre {

tipo nombre_campo;

tipo nombre_campo;

.......

}

52

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Estructuras y unionesEstructuras y uniones

• Diferentes formas de declarar variables

• Acceso a campos con “.”

DefiniciDefinicióón de estructurasn de estructuras

struct point {

int x;

int y;

};

......

struct point a, b;

struct {

int x;

int y;

} a, b;

b = a.x;

a.y = c;

Page 27: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 27

53

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

Estructuras y unionesEstructuras y uniones

• Se puede renombrar un tipo simple o dar un nombre a un tipo compuesto

DefiniciDefinicióón de estructurasn de estructuras

typedef struct point {

int x;

int y;

} Coordenadas;

......

Coordenadas a, b;

typedef int Longitud;

Longitud i, j;

54

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• Un puntero es una variable que contiene la dirección de una variable

• Declaración

• Asignación de dirección (&) y desreferenciación (*)

DefiniciDefinicióónn

Int(y)

int *(puntero)

struct(coordenadas)

Int(x)

char( c)

tipo *nombre;

int *puntero;

int y;

puntero = &y;

x = *puntero;

*puntero = *puntero + 5;

Page 28: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 28

55

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunterosDefiniciDefinicióónn

56

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• El valor NULL puede asignarse a cualquier tipo de puntero

• Significa que el puntero no apunta a ningún sitio• No se puede desreferenciar

DefiniciDefinicióónn

Int(y)

int *(puntero)

struct(coordenadas)

Int(x)

char( c)

puntero = NULL;

Page 29: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 29

57

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• El incremento o decremento de una variable tipo puntero depende del tipo de variable a la que apunta

AritmAritméética de punterostica de punteros

int y, *py;

py = &y;

py++;

58

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• En general, C pasa los argumentos por valor• El paso “por referencia” se realiza pasando la

dirección de la variable

Punteros y funcionesPunteros y funciones

void swap(int x, int y)

{

int c;

c = x;

x = y;

y = c;

}

void swap(int *px, int *py)

{

int c;

c = *px;

*px = *py;

*py = c;

}

Page 30: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 30

59

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• Una función puede devolver un puntero

Punteros y funcionesPunteros y funciones

typedef struct point {

int x;

int y;

} Coordenadas;

Coordenadas a, b, *crea_Coord();

main()

{

a = crea_Coord();

}

60

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• En C, punteros y arrays están muy relacionados

• El paso “por referencia” se realiza pasando la dirección como parámetro

Punteros y Punteros y arraysarrays

int a[10], x;

int *pa;

pa = &a[0];

x = *pa;

int a[10], x;

int *pa;

pa = a;

x = *pa;

a[i] ≡ *(a + i)

pa[i] ≡ *(pa + i)

Page 31: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 31

61

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• Importante– Un puntero es una variable (pa=a y pa++ es legal)– Un array no es una variable (a = pa y a++ es ilegal)

• El paso de un array a una función se realiza con un puntero al primer elemento

Punteros y Punteros y arraysarrays

int suma(int a[]);

int suma(int *a);

62

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• Los arrays de punteros son útiles para evitar movimientos de datos

Punteros y Punteros y arraysarrays

Page 32: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 32

63

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• El almacenamiento depende de la declaración

Punteros y Punteros y arraysarrays

Char aname[][15] =

{“no month”, “jan”, “feb”, ...}

Char *name[15] =

{“no month”, “jan”, “feb”, ...}

64

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

• La sintaxis para acceder a los campos de estructuras mediante punteros es distinta

PunterosPunterosPunteros y estructurasPunteros y estructuras

struct point {

int x;

int y;

}a, *pb;

a.x = pb->x;

Page 33: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 33

65

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• Una función C no es una variable, pero– Se puede apuntar a la memoria donde comienza un segmento

de código (función)– Se puede usar el puntero como el de una variable

• Se define el tipo de las funciones– que tienen el mismo tipo de retorno– y los mismos argumentos

• Las funciones definidas que lo cumplan son valores del tipo

Punteros a funcionesPunteros a funciones

66

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunterosPunteros a funcionesPunteros a funciones

int (*pf) () /* puntero a función que devuelve un entero */

void (*pv) () /* puntero a función que devuelve void */

char (*(*x())[])() /* puntero a función que devuelve un array de punteros a funciones que

devuelven char */

char (*(*x[3])())[5] /* array de 3 punteros a funciones que devuelven punteros a

arrays de 5 char */

Page 34: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 34

67

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• El programa puede acceder a los argumentos que lo acompañan

cc es el programa -o copy y copy.c son los argumentos

argc : número de argumentos, incluido el nombre del programa argv apunta a cada argumento

Procesamiento de la lProcesamiento de la líínea de argumentosnea de argumentos

%cc -o copy copy.c

main(int argc, char **argv)

68

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• C permite crear de forma dinámica espacio para cualquier tipo de variable y obtener su dirección en un puntero

• Funciones de la librería estándar (<stdlib.h>)

GestiGestióón dinn dináámica de memoriamica de memoria

void *malloc(size_t size)

void free(void *p)

void *calloc(size_t elem, size_t size)

void *realloc(void *p, size_t size)

Page 35: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 35

69

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunterosGestiGestióón dinn dináámica de memoriamica de memoria

#include <stdio.h>#include <malloc.h>

main(){ int size;

int *arr; int i = 0;

printf(“Introduzca el numero de elementos del array\n");scanf("%d",&size);

if ( (arr = (int *) malloc(size*sizeof(int))) == NULL){ printf("Error: No hay memoria suficiente\n");exit(-1);

}

/* lee los datos */

while (i< size){ printf(”Introduzca numero %d:\n", i);scanf("%d", arr + i);++i;

} }

70

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PunterosPunteros

• No asignar memoria antes de usar

• Reserva de memoria en la variable apuntada

Errores frecuentesErrores frecuentes

int *x;

*x = 40;

int *x;

x = &y;

*x = 40;

*x = (int *)malloc(200); x = (int *)malloc(200);

Page 36: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 36

71

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PreprocesadorPreprocesador de Cde CConstantes y macrosConstantes y macros

#define FALSE 0

#define TRUE !FALSE

#define MAX(A,B) ( (A > B) ? (A) : (B) )

#define IGUAL ==

#define SIN_FIN while(1)

#define cuadrado(x) (x)*(x)

cuadrado (z+1); /* (z+1)*(z+1) */

cuadrado (z++); /* (z++)*(z++) */

72

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

PreprocesadorPreprocesador de Cde C

• Cualquier tipo de fichero de texto– El directorio de búsqueda depende de < > ó “ “

• Inclusión condicional

InclusiInclusióón de ficherosn de ficheros

#include <stdio.h>

#include “funciones.h”

#if defined STANDARD

#include <stdio.h>

#else

#include “miio.h”

#endif

Page 37: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 37

73

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ProgramaciProgramacióón modular en Cn modular en C

• Motivos– Tamaño– Desarrollo en equipo– Reutilización de código

• Estrategia– Fichero .h con declaración de funciones y variables globales

como externas– Fichero .c con el cuerpo de las funciones y declaración de las

variables

DivisiDivisióón de un programa en ficherosn de un programa en ficheros

74

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ProgramaciProgramacióón modular en Cn modular en CDivisiDivisióón de un programa en ficherosn de un programa en ficheros

Definición f.h

extern int v1;extern int f1(..)extern int f2(..)

Implementación f.c

int v1;int f1() {.. }int f2 {.. }

main{a = f1( ..);b = f2(..);

..}

Programa p.c

Declaración#include “f.h”

Page 38: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 38

75

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ProgramaciProgramacióón modular en Cn modular en C

• Necesidades– Compilación se los .c, incluyendo los .h adecuados

– Generación del ejecutable

• Si el número de ficheros es grande, hay que automatizar !!

CompilaciCompilacióón separadan separada

gcc –o exe f.o p.o

gcc –c f.c

gCc –c p.c

76

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

ProgramaciProgramacióón modular en Cn modular en C

• Automatizar con script del shell– Se compila todo por cada cambio

• Automatizar de forma inteligente– recompilan sólo los necesarios– conocen las dependencias entre ficheros

• Herramientas inteligentes– make, touch– sistemas de control de versiones

CompilaciCompilacióón separadan separada

Page 39: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 39

77

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

C, C, UnixUnix y bibliotecas de funcionesy bibliotecas de funcionesBiblioteca estBiblioteca estáándar de Cndar de C

<stdio.h> entrada/salidafopen(), fflush(), fprintf(), fscanf(), fgetc(), putchar()

<errno.h> manejo de erroresclearerr(), feof(), ferror(), perror()

<string.h> manejo de cadenas de caracteresstrcpy(), strcat (), strcmp(), strstr(), strlen()

<math.h> funciones matemáticassin(), cos(), log(), sqrt(), exp(),

78

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

C, C, UnixUnix y bibliotecas de funcionesy bibliotecas de funcionesBiblioteca estBiblioteca estáándar de Cndar de C

<stdlib.h> utilidades variasatof(), atoi (), malloc (), free(), abort() , system()

<assert.h> diagnósticoassert()

<stdarg.h> manejo de una lista de argumentosva_list, va_start(), var_arg(), va_end()

<time.h> fecha y horaclock(), time(), difftime(),

Page 40: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 40

79

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

C, C, UnixUnix y bibliotecas de funcionesy bibliotecas de funcionesEntrada/salida estEntrada/salida estáándar <ndar <stdiostdio.h> .h>

• Caracteres– int putchar (int);– int getchar (void); /* EOF */

• Cadenas– int puts (char* s);– char *gets (char*);

• E/S con formato– int printf (char* s, ...);– int scanf (char* s,...);

80

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

C, C, UnixUnix y bibliotecas de funcionesy bibliotecas de funcionesEntrada/salida estEntrada/salida estáándar <ndar <stdiostdio.h> .h>

• Algunos descriptores de formatod: decimalo: octalx: hexadecimalu: decimal sin signoc: carácters: cadenap: punteroe,f,g: número en punto flotante

Page 41: Sistemas Operativosrusman/docencia/so/Resumen C.pdf · Sistemas Operativos 04/04/2005 Tema 3: Mecanismos de comunicación y sincronización 17 33 SO - ANSI C Francisco Rus Mansilla

Sistemas Operativos 04/04/2005

Tema 3: Mecanismos de comunicación y sincronización 41

81

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

C, C, UnixUnix y bibliotecas de funcionesy bibliotecas de funcionesEntrada/salida estEntrada/salida estáándar <ndar <stdiostdio.h> .h>

• Manejo de ficheros con FILE *• El tipo FILE* representa un flujo de caracteres• Los flujos de entrada/salida estándar ya están

abiertos– stdin– stdout– stderr

82

SO -

ANSI

C

Francisco Rus Mansilla Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga

C, C, UnixUnix y bibliotecas de funcionesy bibliotecas de funcionesEntrada/salida estEntrada/salida estáándar <ndar <stdiostdio.h> .h>

• Operaciones sobre ficheros– FILE* fopen ( const char* filename, const char* mode);

El modo: r, w, a, r+, w+, a+, rb, wb, ab, ...

– int fclose (FILE*);– int fflush (FILE*);– Int fprintf(FILE* filename, const char* )– Int fscanf(FILE* filename, const char* )