#include #include #include #include #include #include FILE *f; void cleanup(int sig) { printf("\n"); if (f) fclose(f); exit(EXIT_SUCCESS); } int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "Usage: %s len\n", argv[0]); return (EXIT_FAILURE); } signal(SIGINT, cleanup); long nof_chars = strtod(argv[1], NULL); char buf[nof_chars+1]; if (!(f = fopen("/dev/random", "r"))) { fprintf(stderr, "fopen"); return (EXIT_FAILURE); } while (1) { long nof_read = 0; while (nof_read < nof_chars) { fread(&buf[nof_read], 1, 1, f); if (isprint(buf[nof_read])) { nof_read++; } } buf[nof_chars] = '\0'; printf("%s\n", buf); printf("Press Enter to continue, or ctrl-c to interrupt."); getc(stdin); } fclose(f); return (0); }