A nice platform-neutral program that can be used to create a large amount of files for testing purposes.
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEFAULT_FILE_SIZE 10
int main( int argc, char* argv[]) {
size_t dirlen;
char* directory;
int files;
int filesize;
int i;
if ( argc < 3 || argc > 4) {
printf( "Usage: %s <directory> <files> [<filesize>]\n"
"where\n"
"<directory> is an existing directory\n"
"<files> - number of files to create\n"
"<filesize> - size of each file (can be 0). By default it is equal to %d\n"
"Example:\n"
"%s VOL2:\\manyfils 10000\n", argv[ 0], DEFAULT_FILE_SIZE, argv[ 0]);
return EXIT_FAILURE;
}
dirlen = strlen( argv[ 1]);
directory = malloc( dirlen + sizeof( INT_MAX) + 2);
if ( directory == NULL) {
puts( "Out of memory");
return EXIT_FAILURE;
}
memcpy( directory, argv[ 1], dirlen); /* not zero-terminated, it's ok */
if ( dirlen == 0 ||( directory[ dirlen - 1] != '/' && directory[ dirlen - 1] != '\\')) {
directory[ dirlen] = '\\';
++dirlen;
}
files = atoi( argv[ 2]);
filesize = ( argc == 4) ? atoi( argv[ 3]) : DEFAULT_FILE_SIZE;
printf( "directory = %.*s, files = %d, filesize = %d\n", dirlen, directory, files, filesize);
for ( i = 0; i < files; ++i) {
FILE* f;
int j;
sprintf( directory + dirlen, "%d", i);
/* puts( directory); */
if ( i != 0 && i % 1000 == 0) {
printf( "%d files created so far\n", i);
}
f = fopen( directory, "wb");
if ( f == NULL) {
perror( "fopen");
free( directory);
return EXIT_FAILURE;
}
for ( j = 0; j < filesize; ++j) {
if ( fputc( j, f) == EOF) {
perror( "fputc");
fclose( f);
free( directory);
return EXIT_FAILURE;
}
}
fclose( f);
}
free( directory);
return EXIT_SUCCESS;
}
© 2008 Novell, Inc. All Rights Reserved.