#include #include #include #include #include #define MKNOD_DEV 0 int dirstress(char *dir, int num_files, int prefix) { int i, err, fd; char buf[128]; err = chdir(dir); if (err) { perror("cannot chdir to directory"); return 1; } sprintf(buf, "dir%d", prefix); err = mkdir(buf, 0777); if (err) { perror("mkdir"); return 1; } err = chdir(buf); if (err) { perror("cannot chdir to prefix"); return 1; } for (i = 0; i < num_files; i++) { sprintf(buf, "XXXXXXXXXXXX.%d.%d", prefix, i); switch (i % 4) { case 0: /* * Create a file */ fd = creat(buf, 0666); if (fd > 0) { close(fd); } else { fprintf(stderr,"!! close %s failed\n", buf); perror("close"); } break; case 1: /* * Make a directory. */ if (mkdir(buf, 0777)) { fprintf(stderr,"!! mkdir %s 0777 failed\n", buf); perror("mkdir"); } break; case 2: /* * Make a symlink */ if (symlink(buf, buf)) { fprintf(stderr,"!! symlink %s %s failed\n", buf, buf); perror("symlink"); } break; case 3: /* * Make a dev node */ if (mknod(buf, S_IFCHR | 0666, MKNOD_DEV)) { fprintf(stderr,"!! mknod %s 0x%x failed\n", buf, MKNOD_DEV); perror("mknod"); } break; default: break; } } return 0; } main(int argc, char *argv[]) { pid_t pid; int i, count; if (argc != 4) { printf("Usage: %s directory num_files numprocs\n", argv[0]); exit(1); } #if 0 exit(dirstress(argv[1], atoi(argv[2]))); #else for (i = 0; i < atoi(argv[3]); i++) { printf("i %d\n", i); pid = fork(); if (pid < 0) { perror("fork"); goto done; } if (pid == 0) { exit(dirstress(argv[1], atoi(argv[2]), i)); } } done: while (wait(&count) != -1) ; exit(0); #endif }