/*
* 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);
}