notas:programacion
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| notas:programacion [2011/06/10 12:40] – cayu | notas:programacion [2014/02/07 18:02] (actual) – [IOCTLs] cayu | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ===== Programación ===== | ===== Programación ===== | ||
| + | ===== SCRIPTS ===== | ||
| + | |||
| + | [[notas: | ||
| ===== IOCTLs ===== | ===== IOCTLs ===== | ||
| Línea 9: | Línea 12: | ||
| [[notas: | [[notas: | ||
| + | [[notas: | ||
| ===== Notas generales de programación ====== | ===== Notas generales de programación ====== | ||
| Línea 90: | Línea 94: | ||
| < | < | ||
| running | running | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Agregar comillas a direcciones IP en archivo CSV === | ||
| + | |||
| + | Por ejemplos nos dieron un archivo CSV con todos los campos delimitados por comas, menos las direcciones IP | ||
| + | |||
| + | < | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | sed ' | ||
| </ | </ | ||
| Línea 119: | Línea 136: | ||
| <code bash> | <code bash> | ||
| echo " | echo " | ||
| + | </ | ||
| + | |||
| + | === Pasar mayúculas y minúsculas === | ||
| + | |||
| + | < | ||
| + | echo hola | tr ' | ||
| + | echo HOLA | tr ' | ||
| </ | </ | ||
| Línea 136: | Línea 160: | ||
| </ | </ | ||
| + | === can you get cp to give a progress bar like wget === | ||
| + | |||
| + | http:// | ||
| + | |||
| + | <code bash> | ||
| + | #!/bin/sh | ||
| + | cp_p() | ||
| + | { | ||
| + | | ||
| + | | awk '{ | ||
| + | count += $NF | ||
| + | if (count % 10 == 0) { | ||
| + | | ||
| + | | ||
| + | for (i=0; | ||
| + | printf " | ||
| + | | ||
| + | for (i=percent; | ||
| + | printf " " | ||
| + | | ||
| + | } | ||
| + | } | ||
| + | END { print "" | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Sockets en PHP === | ||
| + | |||
| + | **servidor-tcp.php** | ||
| + | <code php> | ||
| + | <?php | ||
| + | $socket = stream_socket_server(" | ||
| + | if (!$socket) { | ||
| + | echo " | ||
| + | } else { | ||
| + | while ($con = stream_socket_accept($socket)) { | ||
| + | fwrite($con, | ||
| + | fclose($con); | ||
| + | } | ||
| + | fclose($socket); | ||
| + | } | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | |||
| + | **servidor-udp.php** | ||
| + | <code php> | ||
| + | <?php | ||
| + | $socket = stream_socket_server(" | ||
| + | if (!$socket) { | ||
| + | die(" | ||
| + | } | ||
| + | |||
| + | do { | ||
| + | $pqt = stream_socket_recvfrom($socket, | ||
| + | echo " | ||
| + | stream_socket_sendto($socket, | ||
| + | $peer); | ||
| + | } while ($pqt !== false); | ||
| + | |||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | **ascii.c** | ||
| + | <code c> | ||
| + | #include < | ||
| + | |||
| + | int main() | ||
| + | { | ||
| + | int n; | ||
| + | for (n=16; n< | ||
| + | printf ("%d.- %c %d.- %c %d.- %c %d.- %c %d.- %c %d.- %c %d.- %c\n", | ||
| + | n, n, n+1, n+1, n+2, n+2, n+3, n+3, n+4, n+4, n+5, n+5, n+6, n+6); | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | ===== Problema clásicos de programación ====== | ||
| + | |||
| + | === Peluquero dormilón === | ||
| + | |||
| + | <code c> | ||
| + | /* | ||
| + | Author: dhb@email.it | ||
| + | Your comments are welcome. | ||
| + | |||
| + | Peluquero dormilón | ||
| + | Introducción | ||
| + | Una ciudad tiene una peluquería con dos puertas y unas pocas sillas. | ||
| + | Los clientes entran por una puerta y salen por la otra. | ||
| + | Dado que el negocio es chico, a lo sumo un cliente o el peluquero se pueden mover en al a la vez. | ||
| + | El peluquero pasa su vida atendiendo clientes, uno por vez. | ||
| + | Cuando no hay ninguno, el peluquero duerme en su silla. | ||
| + | Cuando llega un cliente y encuentra que el peluquero está durmiendo, el cliente lo despierta, | ||
| + | se sienta en la silla del peluquero y duerme mientras el peluquero le corta el pelo. | ||
| + | Si el peluquero está ocupado cuando llega un cliente, el cliente se va a dormir a una de las otras sillas. | ||
| + | Despúes de un corte de pelo, el peluquero abre la puerta de salida para el cliente y la cierra cuando el cliente se va. | ||
| + | Si hay clientes esperando, el peluquero despierta a uno y espera que el cliente se siente. | ||
| + | Sino, se vuelve a dormir hasta que llegue un cliente. | ||
| + | Implementación | ||
| + | La implementación propuesta esta desarrollada en C usando semáforos. | ||
| + | Semáforos: | ||
| + | Clientes (customers): | ||
| + | Barberos (barber): número de peluqueros (barberos) inactivos. | ||
| + | Exmut: exclusión mutua. | ||
| + | Condiciones iniciales: customers = 0, barber = 0, exmut = 1 | ||
| + | Código | ||
| + | */ | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | #define TRUE 1 | ||
| + | #define FALSE 0 | ||
| + | #define CHAIRS 3 //Sillas Disponibles | ||
| + | #define CANT_CUST 5 //Cantidad de Clientes | ||
| + | #define T_CUST 0 //Tiempo de llegada de Clientes | ||
| + | #define T_CORTE 3 //Tiempo de corte de pelo | ||
| + | |||
| + | typedef int semaphore; | ||
| + | |||
| + | //Prototipo de funciones | ||
| + | void *customer (void *); | ||
| + | void *barber (void *); | ||
| + | void up (semaphore *); | ||
| + | void down (semaphore *); | ||
| + | |||
| + | semaphore sem_barber=0, | ||
| + | int waiting=0; | ||
| + | |||
| + | //Main function | ||
| + | int main (void) { | ||
| + | | ||
| + | int i; | ||
| + | |||
| + | | ||
| + | for (i=0; | ||
| + | sleep(T_CUST); | ||
| + | pthread_create(& | ||
| + | } | ||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | void *customer (void *n) { | ||
| + | | ||
| + | down (& | ||
| + | if (waiting < CHAIRS) { | ||
| + | waiting++; | ||
| + | up (& | ||
| + | up (& | ||
| + | down (& | ||
| + | printf (" | ||
| + | } | ||
| + | else { | ||
| + | up (& | ||
| + | printf (" | ||
| + | | ||
| + | } | ||
| + | |||
| + | void *barber (void *j) { | ||
| + | | ||
| + | while (TRUE) { | ||
| + | down (& | ||
| + | down (& | ||
| + | waiting--; | ||
| + | up (& | ||
| + | up (& | ||
| + | printf (" | ||
| + | sleep (T_CORTE); | ||
| + | printf (" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void up (semaphore *sem) { | ||
| + | | ||
| + | } | ||
| + | |||
| + | void down (semaphore *sem) { | ||
| + | while (*sem< | ||
| + | *sem-=1; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | === Uso de la Función div() === | ||
| + | |||
| + | |||
| + | **Sintaxis: | ||
| + | |||
| + | div_t div(int num, int denom); | ||
| + | |||
| + | **Descripcion: | ||
| + | |||
| + | |||
| + | <code c> | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | int main() | ||
| + | { | ||
| + | div_t d; | ||
| + | int num, denom; | ||
| + | |||
| + | puts( " | ||
| + | | ||
| + | d = div( num, denom ); | ||
| + | | ||
| + | |||
| + | | ||
| + | } | ||
| + | </ | ||
notas/programacion.1307709618.txt.gz · Última modificación: 2011/06/10 12:40 por cayu
