/* pr_urand.c -- Print unsigned long random numbers from /dev/urandom. Written to test sort_n.c. Steve Witham ess double you at remove-this tiac dot net 2009.01.18 */ #include #include #include #include char *progname; void usage( ) { fprintf( stderr, "Usage: %s [-w] [how_many]\n", progname ); fprintf( stderr, " default is to print 1,000,000 decimal unsigned longs.\n" ); fprintf( stderr, " -w: only multiples of 4096, the worst case for sort_n\n" ); exit( 1 ); } main( int argc, char **argv ) { FILE *urandom; unsigned long n; char *n_end; unsigned long r; int ngot; int worst = FALSE; progname = argv[0]; if( argc > 1 && strcmp( argv[1], "-w" ) == 0 ) { worst = TRUE; argc--; argv++; } if( argc > 2 || ( argc >=2 && *(argv[1]) == '-' ) ) { usage( argv[0] ); } if( argc == 2 ) { n = strtoul( argv[1], &n_end, 0 ); if( n_end == argv[1] ) { usage( argv[0] ); } } else { n = 1000000; } urandom = fopen( "/dev/urandom", "r" ); while( n-- > 0 ) { ngot = fread( (char *) &r, sizeof( r ), 1, urandom ); if( ngot != 1 ) { fprintf( stderr, "Read %d instead of 1 long.\n", ngot ); exit( 1 ); } if( worst ) r &= 0xffffF000; printf( "%lu\n", r ); } }