Skip to content
Snippets Groups Projects
Commit cc6c2e9d authored by Alexander Zarochentsev's avatar Alexander Zarochentsev
Browse files

Branch HEAD

b=17235
i=adigler@sun.com

add -r 'deletepath' option to createmany.c; createmany.c code cleanup.
parent cdc8a8e1
No related branches found
No related tags found
No related merge requests found
...@@ -43,69 +43,103 @@ ...@@ -43,69 +43,103 @@
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <getopt.h>
void usage(char *prog) static void usage(char *prog)
{ {
printf("usage: %s {-o|-m|-d|-l<tgt>} filenamefmt count\n", prog); printf("usage: %s {-o|-m|-d|-l<tgt>} [-r altpath ] filenamefmt count\n", prog);
printf(" %s {-o|-m|-d|-l<tgt>} filenamefmt -seconds\n", prog); printf(" %s {-o|-m|-d|-l<tgt>} [-r altpath ] filenamefmt ] -seconds\n", prog);
printf(" %s {-o|-m|-d|-l<tgt>} filenamefmt start count\n", prog); printf(" %s {-o|-m|-d|-l<tgt>} [-r altpath ] filenamefmt start count\n", prog);
exit(EXIT_FAILURE);
} }
int main(int argc, char ** argv) static char *get_file_name(const char *fmt, long n, int has_fmt_spec)
{ {
int i, rc = 0, do_open = 0, do_link = 0, do_mkdir = 0; static char filename[4096];
char format[4096], *fmt, *tgt = NULL; int bytes;
char filename[4096];
long start, last, end;
long begin = 0, count;
if (argc < 4 || argc > 5) { bytes = has_fmt_spec ? snprintf(filename, 4095, fmt, n) :
usage(argv[0]); snprintf(filename, 4095, "%s%ld", fmt, n);
return 1; if (bytes >= 4095) {
printf("file name too long\n");
exit(EXIT_FAILURE);
} }
return filename;
}
if (strcmp(argv[1], "-d") == 0) { int main(int argc, char ** argv)
do_mkdir = 1; {
} else if (strcmp(argv[1], "-o") == 0) { long i;
do_open = 1; int rc = 0, do_open = 0, do_link = 0, do_mkdir = 0;
} else if (strncmp(argv[1], "-l", 2) == 0 && argv[1][2]) { int do_unlink = 0, do_mknod = 0;
tgt = argv[1] + 2; char *filename;
do_link = 1; char *fmt = NULL, *fmt_unlink = NULL, *tgt = NULL;
} else if (strcmp(argv[1], "-m") != 0) { long start, last, end = ~0UL >> 1;
usage(argv[0]); long begin = 0, count = ~0UL >> 1;
return 1; int c, has_fmt_spec = 0, unlink_has_fmt_spec = 0;
/* Handle the last argument in form of "-seconds" */
if (argc > 1 && argv[argc - 1][0] == '-') {
char *endp;
argc--;
end = strtol(argv[argc] + 1, &endp, 0);
if (end <= 0 || *endp != '\0')
usage(argv[0]);
end = end + time(NULL);
} }
if (strlen(argv[2]) > 4080) { while ((c = getopt(argc, argv, "omdl:r:")) != -1) {
printf("name too long\n"); switch(c) {
return 1; case 'o':
do_open++;
break;
case 'm':
do_mknod++;
break;
case 'd':
do_mkdir++;
break;
case 'l':
do_link++;
tgt = optarg;
break;
case 'r':
do_unlink++;
fmt_unlink = optarg;
break;
case '?':
printf("Unknown option '%c'\n", optopt);
usage(argv[0]);
}
} }
start = last = time(0); if (do_open + do_mkdir + do_link + do_mknod != 1 ||
do_unlink > 1)
usage(argv[0]);
if (argc == 4) { switch (argc - optind) {
end = strtol(argv[3], NULL, 0); case 3:
} else { begin = strtol(argv[argc - 2], NULL, 0);
begin = strtol(argv[3], NULL, 0); case 2:
end = strtol(argv[4], NULL, 0); count = strtol(argv[argc - 1], NULL, 0);
if (end != ~0UL >> 1)
usage(argv[0]);
case 1:
fmt = argv[optind];
break;
default:
usage(argv[0]);
} }
if (end > 0) { start = last = time(NULL);
count = end;
end = -1UL >> 1;
} else {
end = start - end;
count = -1UL >> 1;
}
if (strchr(argv[2], '%')) has_fmt_spec = strchr(fmt, '%') != NULL;
fmt = argv[2]; if (do_unlink)
else { unlink_has_fmt_spec = strchr(fmt_unlink, '%') != NULL;
sprintf(format, "%s%%d", argv[2]);
fmt = format; for (i = 0; i < count && time(NULL) < end; i++, begin++) {
} filename = get_file_name(fmt, begin, has_fmt_spec);
for (i = 0; i < count && time(0) < end; i++, begin++) {
sprintf(filename, fmt, begin);
if (do_open) { if (do_open) {
int fd = open(filename, O_CREAT|O_RDWR, 0644); int fd = open(filename, O_CREAT|O_RDWR, 0644);
if (fd < 0) { if (fd < 0) {
...@@ -140,14 +174,27 @@ int main(int argc, char ** argv) ...@@ -140,14 +174,27 @@ int main(int argc, char ** argv)
break; break;
} }
} }
if (do_unlink) {
filename = get_file_name(fmt_unlink, begin,
unlink_has_fmt_spec);
rc = do_mkdir ? rmdir(filename) : unlink(filename);
if (rc) {
printf("unlink(%s) error: %s\n",
filename, strerror(errno));
rc = errno;
break;
}
}
if ((i % 10000) == 0) { if ((i % 10000) == 0) {
printf(" - created %d (time %ld total %ld last %ld)\n", printf(" - created %ld (time %ld total %ld last %ld)\n",
i, time(0), time(0) - start, time(0) - last); i, time(0), time(0) - start, time(0) - last);
last = time(0); last = time(NULL);
} }
} }
printf("total: %d creates in %ld seconds: %f creates/second\n", i, printf("total: %ld creates%s in %ld seconds: %f creates/second\n", i,
time(0) - start, ((float)i / (time(0) - start))); do_unlink ? "/deletions" : "",
time(NULL) - start, ((float)i / (time(0) - start)));
return rc; return rc;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment