start
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
start [2012/07/28 17:27] – [Clase 1: Lenguaje C, E/S Estándar] lmateu | start [2014/11/15 12:44] (actual) – [Servidor Multi-cliente con select] lmateu | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== CC3301 - Programación de Software de Sistemas ====== | ====== CC3301 - Programación de Software de Sistemas ====== | ||
- | Programa | + | Estos son los apuntes |
+ | [[http:// | ||
+ | José Piquer. Hay un índice del contenido en los comentarios para las clases 2, 3, 4 y 5. El que vea | ||
+ | los siguientes videos sin el índice agregue un comentario con el contenido por favor. | ||
+ | Pero cuidado, la enumeración de las clases de esta página no corresponde uno a uno a la enumeración de los 23 videos, | ||
+ | ni siquiera el orden. | ||
+ | |||
+ | En los apuntes de [[temario|Luis Mateu]] se explican los mismos conceptos de esta página pero con más detalle. | ||
- | [[http:// | ||
===== Clase 1: Lenguaje C, E/S Estándar ===== | ===== Clase 1: Lenguaje C, E/S Estándar ===== | ||
- | + | Ver contenido extendido | |
- | === Historia === | + | |
- | + | ||
- | * En los 50's nace el primer lenguaje de programación: | + | |
- | * En los 60's surge el primer lenguaje con programación estructurada: | + | |
- | * En los 70's aparece Pascal (de Niklaus Wirth). | + | |
- | * También en los 70's aparece C (de Brian Kernighan). | + | |
- | * A fines de los 70's aparece el primer lenguaje orientado a objetos: Smalltalk. | + | |
- | * En los 80's Bjarne Stroustrup enriquece C con clases para facilitar la programación orienta a objetos en un lenguaje eficiente, dando así origen al lenguaje C++. Tampoco es robusto y es complejo. | + | |
- | * En los 90's James Gosling concibe Java como una forma de darle robustez a C++. Es menos complejo que C++. | + | |
- | + | ||
- | === Ejemplo de pograma en C === | + | |
Ejemplo estudiado: [[http:// | Ejemplo estudiado: [[http:// | ||
Línea 24: | Línea 19: | ||
#include < | #include < | ||
- | /* | + | /* |
* Copia la entrada en su salida sin modificaciones | * Copia la entrada en su salida sin modificaciones | ||
*/ | */ | ||
Línea 38: | Línea 33: | ||
} | } | ||
</ | </ | ||
- | |||
Pueden probar compilando este programa: | Pueden probar compilando este programa: | ||
Línea 58: | Línea 52: | ||
</ | </ | ||
- | Entonces los archivos out, out2 y out3 todos son iguales. | ||
- | |||
- | === Comparación entre C y Java === | ||
- | |||
- | == Generalidades == | ||
- | |||
- | * Los archivos en C llevan las extensión ' | ||
- | * El compilador de C (comandos gcc o cc) produce archivos con instrucciones de máquina en binario que son directamente ejecutables por la máquina. | ||
- | * El compilador de Java (comando javac) produce archivos ' | ||
- | |||
- | == Programación orientada a objetos == | ||
- | |||
- | * C no es un lenguaje orientado a objetos: no posee clases. | ||
- | * En C se definen los tipos compuestos mediante la declaración **struct**. | ||
- | * La abstracción que describe como se procesan los datos es la // | ||
- | * En Java un archivo contiene 1 clase (opcionalmente más de 1). No hay funciones aisladas. | ||
- | * En un archivo en C, las abstracciones declaradas se conocen a partir del punto en donde se declaran. No se pueden referenciar antes. Típicamente se declaran prototipos de las abstracciones (especialmente las funciones) en archivos de encabezado (extensión .h). | ||
- | * En Java las abstracciones declaradas en un archivo o clase son globalmente conocidas. | ||
- | |||
- | == Tipos primitivos == | ||
- | |||
- | * Usan casi los mismos tipos primitivos: char, short, int, long, float, double. | ||
- | * Pero en C, char es en realidad un entero de 1 byte, mientras que en Java ocupa 2 bytes y solo almacena caracteres. | ||
- | * En C se puede agregar el atributo unsigned a los enteros. | ||
- | |||
- | == Strings == | ||
- | |||
- | * C no posee el tipo String. | ||
- | * En Java existe la clase predefinida String con métodos bien definidos. | ||
- | |||
- | == Punteros == | ||
- | |||
- | La siguiente tabla compara la sintaxis usada para las distintas operaciones con punteros: | ||
- | |||
- | ^ ^ Java ^ C ^ | ||
- | | declaración | < | ||
- | | acceso | < | ||
- | | destrucción | | < | ||
- | | puntero nulo | < | ||
- | |||
- | * En C la memoria se pide con malloc, mientras que en Java con new. | ||
- | * malloc necesita el tamaño de la memoria a asignar. | ||
- | * En C se accede a los campos de la esctructura con el operador ' | ||
- | * En Java nunca se libera el área de memoria ocupada por p. Hay un recolector de basuras que recicla esa memoria cuando deja ser referenciada. | ||
- | * C //no posee recolector de basuras// | ||
- | * Un error frecuente en C es el puntero loco o colgante (dangling reference). | ||
- | * Otro error frecuente en C es la gotera de memoria: cuando un trozo de memoria pedido con malloc nunca se libera. | ||
- | * En Java el recolector de basura evita por completo los punteros locos. | ||
- | * En C el puntero nulo es NULL en mayúscula. | ||
- | |||
- | == Variables locales de tipo compuesto == | ||
- | * En C se pueden declarar variables de tipo compuesto (structs) que son locales a una función. | ||
- | * No se debe llamar a malloc. | ||
- | * Se accede a los campos con el operador ' | ||
- | * La variable se destruye automáticamente al retornar de la función. | ||
- | * Se puede asignar la dirección de la variable a un puntero: < | ||
- | * Un error típico es acceder al contenido de p después del retorno de la función en donde se declaró node. | ||
- | * Como Java es un lenguaje robusto, para evitar este error simplemente en Java no se pueden declarar variables de tipos compuestos locales a una función. | ||
====== Clase 2: Lenguaje C y tipos básicos ====== | ====== Clase 2: Lenguaje C y tipos básicos ====== | ||
+ | Ver contenido extendido en [[tipos|tipos]] y [[variables|variables]]. | ||
===== Enteros ===== | ===== Enteros ===== | ||
char: 8 bits, 1 byte | char: 8 bits, 1 byte | ||
Línea 138: | Línea 75: | ||
===== Punteros ===== | ===== Punteros ===== | ||
+ | Ver contenido extendido en [[punteros|punteros]] y [[strings|strings]]. | ||
==== Strings ==== | ==== Strings ==== | ||
Línea 3193: | Línea 3131: | ||
Atendemos todos los clientes en el mismo ciclo, usando select: | Atendemos todos los clientes en el mismo ciclo, usando select: | ||
<code C> | <code C> | ||
+ | #define _BSD_SOURCE 1 | ||
+ | |||
#include < | #include < | ||
#include < | #include < | ||
Línea 3281: | Línea 3221: | ||
} | } | ||
} | } | ||
+ | </ | ||
+ | |||
+ | Se necesita definir la macro _BSD_SOURCE al inicio del programa para hacer válido el uso de la función getdtablesize(). | ||
+ | |||
+ | < | ||
+ | % man 3 getdtablesize | ||
+ | NAME | ||
+ | | ||
+ | |||
+ | SYNOPSIS | ||
+ | # | ||
+ | |||
+ | int getdtablesize(void); | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | Since glibc 2.12: | ||
+ | | ||
+ | | ||
</ | </ | ||
start.1343496429.txt.gz · Última modificación: 2012/07/28 17:27 por lmateu