Universidad Tecnológica Nacional Facultad Regional Buenos Aires ASIGNATURA: DISEÑO DE SISTEMAS
Universidad Tecnológica Nacional Facultad Regional Buenos Aires
description
Transcript of 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
• Windows – Visual Studio
• Linux / Solaris – gcc
Compiladores
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
• 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)
• 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
all:
make clean
make archivo
clean:
rm archivo
archivo:
gcc –ggdb archivo.c –o archivo
Makefile – Ejemplo
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
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
#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
#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
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!
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
#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).
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
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