Universidad Tecnológica Nacional Facultad Regional Buenos Aires

15
Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Introducción a C Sistemas Operativos

description

Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información. Sistemas Operativos. Introducción a C. Compiladores. Windows – Visual Studio Linux / Solaris – gcc. Mi primer programa en C. archivo.c #include int main(void) { int a = 1; - PowerPoint PPT Presentation

Transcript of Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Page 1: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Universidad Tecnológica Nacional

Facultad Regional Buenos AiresIngeniería en Sistemas de

Información

Introducción a CSistemas Operativos

Page 2: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

• Windows – Visual Studio

• Linux / Solaris – gcc

Compiladores

Page 3: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

archivo.c

#include <stdio.h>int main(void) {

int a = 1;int b = 2;int c;

c = a + b;printf("La suma de las variables es: %d\n", c);

}

Consola

# gcc archivo.c –o archivo# ./archivoLa suma de las variables es: 3

Mi primer programa en C

Page 4: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

• int (4 bytes) • char (1 byte)• puntero a tipo de datos (4 bytes)

http://en.wikipedia.org/wiki/C_syntax#Primitive_data_types

Tipos de datos (32bits)

Page 5: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

• Medianamente “tipado”. Toda la memoria se puede castear como otro tipo de datos.

• Todo devuelve un valor por ende todo se puede preguntar. Ej: If (a+b). Si ==0 falso y si !=0 verdadero

• El punto de inicio del programa es la función “main”.

• El código se puede ampliar mediante el uso de bibliotecas.

Introducción a C

Page 6: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

all:

make clean

make archivo

clean:

rm archivo

archivo:

gcc –ggdb archivo.c –o archivo

Makefile – Ejemplo

Page 7: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Makefile – Ejemplo

debian:~/charlasC# makemake cleanmake[1]: Entering directory `/root/charlasC'rm archivomake[1]: Leaving directory `/root/charlasC'make archivomake[1]: Entering directory `/root/charlasC'gcc -ggdb archivo.c -o archivomake[1]: Leaving directory `/root/charlasC'

debian:~/charlasC#

http://es.wikipedia.org/wiki/Make

Page 8: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

B0CACACA

Punteros

Proceso

Código(solo lectura)

Datos(memoria dinámica)

Stack (asignaciones estáticas)

#include <stdio.h>int main(void) { int a = 39; char *b; b = (char*) malloc(128);}

39a ????????????????????

????????????????

B0CACACA

b

Page 9: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

#include <stdio.h>int main(void) {int a = 1;char b = 'L';int *c;c = &a;a = a + 1;printf("La variable 'a' vale: %d y la variable 'c' lo mismo: %d y la variable b: %c\n", a, *c, b);

}

Operadores & y *

Puntero a un entero

‘c’ y ‘a’ referencian la misma variable

Page 10: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

#include <stdio.h>#include <stdlib.h>#include <string.h>

int main(void) {

char[20] nombre;char *pnombre;

strcpy (nombre, "Maria");nombre[4] = 'o';Printf ("El valor de nombre es %s y su long: %d\n", nombre, strlen(nombre));

pnombre = (char*)malloc(sizeof(char)*20);

if (!pnombre) {printf("Se asigno la memoria");

} else {printf("La asignación falló");

}free (pnombre);

}

Strings – cadenas

Page 11: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Streams != Strings

H o l a

char cadena[10];

Un stream es una secuencia de chars contiguos (vector)

Un caso particular de los streams es el String, el cual es finalizado con ‘\0’

H o l a \0

char cadena[10];

Todas las operaciones sobre strings (<string.h>, printf, etc), no debe ser ejecutada sobre streams!

Page 12: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Sobre los Strings

• Como todos los vectoresla primer posición es la cero!

• En la reserva de memoria se debe considerar el ‘\0’. (20 pos = 19 char + ‘\0’)

• La ausencia del ‘\0’ al final de una cadena puede generar que se sobreescriban variables del programa y en el mejor de los casos un Segmentation Fault

Page 13: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

#include <stdio.h>#include <stdlib.h>#include <string.h>

int main(void) {

struct persona { int legajo; char nombre[20]; char apellido[25] ; char genero; float altura; }; struct persona p; struct persona *q;

strcpy(p.nombre, "Santiago"); strcpy(p.apellido, "Ciciliani"); p.genero = 'M'; p.altura = 1.75;

q = (struct persona*)malloc(sizeof(struct persona)); strcpy(q->nombre, "Peter"); strcpy(q->apellido, "Capusoto"); q->genero = 'F'; q->altura = 1.60;

printf("Los dos nombres son: %s y %s", p.nombre, q->nombre); free(q);

}

Structs – un ejemplo

Puntero a la estructura (4bytes)

Como es un puntero, le tengo que asignar un espacio de memoria a donde apuntar!

Operador “flechita” (->) equivalente a poner:(*q).

Page 14: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Pasar como referencia

void elevarAlCuadrado (int *x);#include <stdio.h>

int main(void) {

int a = 2;

elevarAlCuadrado (&a);

printf("El valor del cuadrado de a es: %d\n", a);}

void elevarAlCuadrado (int *x) { (*x) = (*x) * (*x);}

No paso “a”, sino su dirección

Trabajo con “eso que está apuntado en la dirección x” y no con x que tiene una dirección de memoria

Page 15: Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Biblioteca estandar<assert.h> Contiene la macro assert (aserción), utilizada para detectar errores lógicos y otros tipos de

fallos en la depuración de un programa.<complex.h> Conjunto de funciones para manipular números complejos (nuevo en C99).<ctype.h> Contiene funciones para clasificar caracteres según sus tipos o para convertir entre mayúsculas y

minúsculas independientemente del conjunto de caracteres (típicamente ASCII o alguna de susextensiones).

<errno.h> Para testar los códigos de error devueltos por las funciones de biblioteca.<fenv.h> Para controlar entornos en coma flotante (nuevo en C99).<float.h> Contiene la definición de constantes que especifican ciertas propiedades de la biblioteca de coma flotante,

como la diferencia mínima entre dos números en coma flotante (_EPSOLON), el número máximo de dígitos de precisión (_DIG), o el rango de valores que se pueden representar (_MIN, _MAX).

<inttypes.h> Para operaciones de conversión con precisión entre tipos enteros (nuevo en C99).<iso646.h> Para utilizar los conjuntos de caracteres ISO 646 (nuevo en NA1).<limits.h> Contiene la definición de constantes que especifican ciertas propiedades de los tipos enteros, como rango de valores que se

pueden representar (_MIN, _MAX).<locale.h> Para la función setlocale() y las constantes relacionadas. Se utiliza para seleccionar el entorno local apropiado

(configuración regional).<math.h> Contiene las funciones matemáticas comunes.<setjmp.h> Declara las macros setjmp y longjmp para proporcionar saltos de flujo de control de programa no locales.<signal.h> Para controlar algunas situaciones excepcionales como la división por cero.<stdarg.h> posibilita el acceso a una cantidad variable de argumentos pasados a una función.<stdbool.h> Para el tipo booleano (nuevo en C99).<stdint.h> Para definir varios tipos enteros (nuevo en C99).<stddef.h> Para definir varios tipos de macros de utilidad.<stdio.h> Proporciona el núcleo de las capacidades de entrada/salida del lenguaje C (incluye la venerable función printf).<stdlib.h> Para realizar ciertas operaciones como conversión de tipos, generación de números pseudo-aleatorios, gestión de

memoria dinámica, control de procesos, funciones de entorno, de señalización (??), de ordenación y búsqueda.<string.h> Para manipulación de cadenas de caracteres.<tgmath.h> Contiene funcionalidades matemáticas de tipo genérico (type-generic) (nuevo en C99).<time.h> Para tratamiento y conversión entre formatos de fecha y hora.

http://es.wikipedia.org/wiki/Biblioteca_est%C3%A1ndar_de_C