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/09 16:11] – cayu | notas:programacion [2014/02/07 18:02] (actual) – [IOCTLs] cayu | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
===== Programación ===== | ===== Programación ===== | ||
+ | ===== SCRIPTS ===== | ||
+ | [[notas: | ||
+ | ===== IOCTLs ===== | ||
- | ==== Notas generales de programación ===== | + | [[notas: |
+ | |||
+ | [[notas: | ||
+ | |||
+ | [[notas: | ||
+ | |||
+ | [[notas: | ||
+ | ===== Notas generales de programación | ||
=== Actualizacion a PHP 5.3.2 === | === Actualizacion a PHP 5.3.2 === | ||
Línea 84: | 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 113: | Línea 136: | ||
<code bash> | <code bash> | ||
echo " | echo " | ||
+ | </ | ||
+ | |||
+ | === Pasar mayúculas y minúsculas === | ||
+ | |||
+ | < | ||
+ | echo hola | tr ' | ||
+ | echo HOLA | tr ' | ||
</ | </ | ||
Línea 130: | 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.txt · Última modificación: 2014/02/07 18:02 por cayu