/* LFS modified to test read-only file systems. Generates files */ #include #include #include #include #include #include "sys/stat.h" #include #include "fcntl.h" static char buf[40960]; static char name[32]; static char *prog_name; extern int errno; int rand_fd = -1; #define NDIR 100 static char dir[32]; void creat_dir() { int i; umask(0); for (i = 0; i < NDIR; i++) { sprintf(dir, "d%d", i); mkdir(dir, 0777); } } void creat_test(int n, int size) { int i; int r; int fd; int j; unsigned s, f; s = time(0); for (i = 0, j = 0; i < n; i ++) { sprintf(name, "d%d/g%d", j, i); if((fd = open(name, O_RDWR | O_CREAT | O_TRUNC, S_IRWXU)) < 0) { printf("%s: create %d failed %d %d\n", prog_name, i, fd, errno); exit(1); } if ((rand_fd != -1) && ((r = read(rand_fd, buf, size)) < 0)) { printf("%s: read failed %d %d\n", prog_name, r, errno); exit(1); } /* buf[random() % size] ^= random(); */ if ((r = write(fd, buf, size)) < 0) { printf("%s: write failed %d %d\n", prog_name, r, errno); exit(1); } if ((r = close(fd)) < 0) { printf("%s: close failed %d %d\n", prog_name, r, errno); } if ((i+1) % 100 == 0) j++; } /* sync(fd); */ f = time(0); printf("%s: creat took %d usec\n", prog_name, f - s); } int main(int argc, char *argv[]) { int n; int size; prog_name = argv[0]; if (argc < 3 || argc > 4) { printf("%s: %s num size \n", prog_name, prog_name); exit(1); } n = atoi(argv[1]); size = atoi(argv[2]); printf("%s %d %d\n", prog_name, n, size); creat_dir(); /* Use random data in files */ if (argc == 4) { printf("Using yrandom source\n"); if((rand_fd = open("/dev/urandom", O_RDONLY)) < 0) { printf("%s: create failed %d %d\n", prog_name, rand_fd, errno); exit(1); } } creat_test(n, size); return 0; }