Herramientas de usuario

Herramientas del sitio


notas:programacion

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
Próxima revisiónAmbos lados, revisión siguiente
notas:programacion [2011/06/10 12:27] cayunotas:programacion [2011/09/20 19:46] – [Notas generales de programación] cayu
Línea 7: Línea 7:
 [[notas:programacion:Reproductor de CD]] [[notas:programacion:Reproductor de CD]]
  
 +[[notas:programacion:The Linux CDROM interface]]
 ===== Notas generales de programación ====== ===== Notas generales de programación ======
  
Línea 88: Línea 89:
 <code> <code>
  running  running
 +</code>
 +
 +
 +=== 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>
 +"10.1.1.5","255.255.255.0","Equipo de Red","Red de casa","","DHCP","","","","",""
 +</code>
 +
 +<code bash>
 +sed 's/[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}/"&"/g'
 </code> </code>
  
Línea 117: Línea 131:
 <code bash> <code bash>
 echo "tmp=$variable; tmp /= 1;tmp" | bc echo "tmp=$variable; tmp /= 1;tmp" | bc
 +</code>
 +
 +=== Pasar mayúculas y minúsculas ===
 +
 +<code>
 +echo hola | tr '[:lower:]' '[:upper:]'
 +echo HOLA | tr '[:upper:]' '[:lower:]'
 </code> </code>
  
Línea 134: Línea 155:
 </code> </code>
  
 +=== can you get cp to give a progress bar like wget ===
 +
 +http://chris-lamb.co.uk/2008/01/24/can-you-get-cp-to-give-a-progress-bar-like-wget/
 +
 +<code bash>
 +#!/bin/sh
 +cp_p()
 +{
 +   strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
 +      | awk '{
 +        count += $NF
 +            if (count % 10 == 0) {
 +               percent = count / total_size * 100
 +               printf "%3d%% [", percent
 +               for (i=0;i<=percent;i++)
 +                  printf "="
 +               printf ">"
 +               for (i=percent;i<100;i++)
 +                  printf " "
 +               printf "]\r"
 +            }
 +         }
 +         END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
 +}
 +</code>
 +
 +
 +=== Sockets en PHP ===
 +
 +**servidor-tcp.php**
 +<code php>
 +<?php
 +$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
 +if (!$socket) {
 +  echo "$errstr ($errno)<br />\n";
 +} else {
 +  while ($con = stream_socket_accept($socket)) {
 +    fwrite($con, 'La hora local es ' . date('n/j/Y g:i a') . "\n");
 +    fclose($con);
 +  }
 +  fclose($socket);
 +}
 +?>
 +</code>
 +
 +
 +**servidor-udp.php**
 +<code php>
 +<?php
 +$socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND);
 +if (!$socket) {
 +    die("$errstr ($errno)");
 +}
 +
 +do {
 +    $pqt = stream_socket_recvfrom($socket, 1, 0, $peer);
 +    echo "$peer\n";
 +    stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0,
 +    $peer);
 +} while ($pqt !== false);
 +
 +?>
 +</code>
 +===== 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): número de clientes en espera sin contar el que se esta cortando el pelo
 +Barberos (barber): número de peluqueros (barberos) inactivos.
 +Exmut: exclusión mutua.
 +Condiciones iniciales: customers = 0, barber = 0, exmut = 1
 +Código
 +*/
 +#include <stdio.h>
 +#include <unistd.h>
 +#include <pthread.h>
 + 
 +#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, sem_customer=0,sem_mutex=1;
 +int waiting=0;
 + 
 +//Main function
 +int main (void) {
 + pthread_t barb_t,cust_t[CANT_CUST];
 + int i;
 + 
 + pthread_create(&barb_t,NULL,barber,NULL);
 + for (i=0;i<CANT_CUST;i++){
 +    sleep(T_CUST);
 +    pthread_create(&cust_t[i],NULL,customer,NULL);
 + }
 +    
 + pthread_join(barb_t,NULL);
 + return(0);
 +}
 + 
 +void *customer (void *n) {
 + printf ("Customer:entrando hay %d esperando\n",waiting);
 + down (&sem_mutex);
 + if (waiting < CHAIRS) {
 +  waiting++;
 +  up (&sem_customer);
 +  up (&sem_mutex);
 +  down (&sem_barber);
 +  printf ("Customer:Me estan cortando el pelo.\n");
 + }
 + else {
 +  up (&sem_mutex);
 +  printf ("Customer:Me fui no hay lugar.\n");
 + 
 +}
 + 
 +void *barber (void *j) {
 + printf ("Barber:Empiezo a trabajar\n"); 
 + while (TRUE) {
 +  down (&sem_customer);
 +  down (&sem_mutex);
 +  waiting--;
 +  up (&sem_barber);
 +  up (&sem_mutex);
 +  printf ("Barber:Comienzo el corte de pelo de un cliente quedan %d esperando.\n",waiting);
 +  sleep (T_CORTE);
 +  printf ("Barber:Termine de cortar el pelo de un cliente quedan %d esperando.\n",waiting);
 + }
 +}
 + 
 +void up (semaphore *sem) {
 + *sem+=1;
 +}
 + 
 +void down (semaphore *sem) {
 +  while (*sem<=0){};
 +  *sem-=1;
 +}
 +</code>
notas/programacion.txt · Última modificación: 2014/02/07 18:02 por cayu