/* * slowcat.c - enlentece la presentación de un fichero * copyright (c) 2001,2002,2007 dave w capella Todos los derechos reservados * * distribuido bajo los términos de la GNU Public license * * There is NO WARRANTY, and NO SUPPORT WHATSOEVER. * * compilación: make slowcat && mv slowcat $HOME/bin * (asumiendo que tiene un directorio personal bin) * * uso: slowcat [-d usecs] fichero * siendo usecs el número de microsegundos de retraso. * * feedback welcome. enjoy! * ...dave * * * 09/24/07 - modificaciones para incluir nanosleep, brian at landsberger.com */ #include <stdio.h> #include <stdlib.h> #include <time.h> int debug = 0; int main(int argc, char **argv) { int c; unsigned long usecs,s; FILE *fp; char *fnam; struct timespec ts; if(argc != 2 && argc != 4) { fprintf(stderr,"uso: %s [-d usecs] fichero\n",argv[0]); exit(1); } if(argc == 4 ) { if( !strncmp(argv[1],"-d",2) ) { usecs = strtoul(argv[2],NULL,10); if(usecs<=0 || usecs>500000L) { usecs = 1; } } if(debug) { fprintf(stderr,"usecs: %lu\nCualquier tecla para continuar.\n",usecs); c = getchar(); } fnam = argv[3]; } /* set timespec */ ts.tv_sec=0; ts.tv_nsec=usecs; if(argc == 2 ) { fnam = argv[1]; } fp = fopen(fnam,"r"); if(fp == NULL) { fprintf(stderr,"uso: %s [-d usecs] fichero\n",argv[0]); exit(2); } while( (c = fgetc(fp)) != EOF) { putchar(c); #ifdef _POSIX_C_SOURCE // assuming >= 199309L if (debug) { fprintf(stderr,"durmiendo usando nanosleep\n"); } nanosleep(&ts,NULL); #else if (debug) { fprintf(stderr,"durimiendo usando for\n"); } for(s=0;s<usecs;s++) ; #endif } fclose(fp); return (0); }