1f08c3bdfSopenharmony_ci/* random-del-create.c (GPL)*/ 2f08c3bdfSopenharmony_ci/* Hironobu SUZUKI <hironobu@h2np.net> */ 3f08c3bdfSopenharmony_ci 4f08c3bdfSopenharmony_ci#include <stdio.h> 5f08c3bdfSopenharmony_ci#include <sys/stat.h> 6f08c3bdfSopenharmony_ci#include <sys/types.h> 7f08c3bdfSopenharmony_ci#include <fcntl.h> 8f08c3bdfSopenharmony_ci#include <unistd.h> 9f08c3bdfSopenharmony_ci#include <time.h> 10f08c3bdfSopenharmony_ci#include <stdlib.h> 11f08c3bdfSopenharmony_ci#define FAIL 0 12f08c3bdfSopenharmony_ci#define SUCCESS 1 13f08c3bdfSopenharmony_ci 14f08c3bdfSopenharmony_ciint openlog[2] = { 0, 0 }; 15f08c3bdfSopenharmony_ci 16f08c3bdfSopenharmony_ci#define MAXNUM 0x100000 17f08c3bdfSopenharmony_ci 18f08c3bdfSopenharmony_ci#define MAXERROR 1024 19f08c3bdfSopenharmony_ci 20f08c3bdfSopenharmony_ciextern int box_muler(int, int); 21f08c3bdfSopenharmony_ciextern void create_or_delete(char *); 22f08c3bdfSopenharmony_ci 23f08c3bdfSopenharmony_ciint cfilecount = 0; 24f08c3bdfSopenharmony_ciint dfilecount = 0; 25f08c3bdfSopenharmony_ciint errorcount = 0; 26f08c3bdfSopenharmony_ci 27f08c3bdfSopenharmony_ciint main(int ac, char **av) 28f08c3bdfSopenharmony_ci{ 29f08c3bdfSopenharmony_ci int r; 30f08c3bdfSopenharmony_ci char fname[1024]; 31f08c3bdfSopenharmony_ci time_t t; 32f08c3bdfSopenharmony_ci int i; 33f08c3bdfSopenharmony_ci int m; 34f08c3bdfSopenharmony_ci 35f08c3bdfSopenharmony_ci if (ac != 2) { 36f08c3bdfSopenharmony_ci printf("%s hex-style-filename \n", av[0]); 37f08c3bdfSopenharmony_ci printf("ex) %s 00022300\n", av[0]); 38f08c3bdfSopenharmony_ci exit(1); 39f08c3bdfSopenharmony_ci } 40f08c3bdfSopenharmony_ci sscanf(av[1], "%x", &m); 41f08c3bdfSopenharmony_ci if (m < 1 || m > MAXNUM) { 42f08c3bdfSopenharmony_ci printf("out of size %d\n", m); 43f08c3bdfSopenharmony_ci exit(1); 44f08c3bdfSopenharmony_ci } 45f08c3bdfSopenharmony_ci 46f08c3bdfSopenharmony_ci time(&t); 47f08c3bdfSopenharmony_ci srandom((unsigned int)getpid() ^ 48f08c3bdfSopenharmony_ci (((unsigned int)t << 16) | (unsigned int)t >> 16)); 49f08c3bdfSopenharmony_ci 50f08c3bdfSopenharmony_ci /* 00/00/00/00 */ 51f08c3bdfSopenharmony_ci for (i = 0; i < m; i++) { 52f08c3bdfSopenharmony_ci r = random() % m; 53f08c3bdfSopenharmony_ci sprintf(fname, "00/%2.2x/%2.2x/00%2.2x%2.2x%2.2x", 54f08c3bdfSopenharmony_ci ((r >> 16) & 0xFF), 55f08c3bdfSopenharmony_ci ((r >> 8) & 0xFF), 56f08c3bdfSopenharmony_ci ((r >> 16) & 0xFF), ((r >> 8) & 0xFF), (r & 0xFF)); 57f08c3bdfSopenharmony_ci create_or_delete(fname); 58f08c3bdfSopenharmony_ci } 59f08c3bdfSopenharmony_ci fprintf(stderr, "Total create files: %d\n", cfilecount); 60f08c3bdfSopenharmony_ci fprintf(stderr, "Total delete files: %d\n", dfilecount); 61f08c3bdfSopenharmony_ci fprintf(stderr, "Total error : %d\n", errorcount); 62f08c3bdfSopenharmony_ci exit(0); 63f08c3bdfSopenharmony_ci} 64f08c3bdfSopenharmony_ci 65f08c3bdfSopenharmony_ci#define MAXFSIZE (192*1024) 66f08c3bdfSopenharmony_ci#define AVEFSIZE (MAXFSIZE/2) 67f08c3bdfSopenharmony_ci#define POOLDISKSPACE (AVEFSIZE*128) 68f08c3bdfSopenharmony_ci 69f08c3bdfSopenharmony_cistatic int disk_space_pool = 0; 70f08c3bdfSopenharmony_civoid create_or_delete(char *fname) 71f08c3bdfSopenharmony_ci{ 72f08c3bdfSopenharmony_ci int r; 73f08c3bdfSopenharmony_ci int fsize; 74f08c3bdfSopenharmony_ci 75f08c3bdfSopenharmony_ci r = (random() & 1); 76f08c3bdfSopenharmony_ci if (r && disk_space_pool > POOLDISKSPACE) { 77f08c3bdfSopenharmony_ci /* create */ 78f08c3bdfSopenharmony_ci create_file(fname); 79f08c3bdfSopenharmony_ci } else { 80f08c3bdfSopenharmony_ci delete_file(fname); 81f08c3bdfSopenharmony_ci } 82f08c3bdfSopenharmony_ci if ((errorcount > dfilecount || errorcount > cfilecount) 83f08c3bdfSopenharmony_ci && (errorcount > MAXERROR)) { 84f08c3bdfSopenharmony_ci fprintf(stderr, "too much error -- stop\n"); 85f08c3bdfSopenharmony_ci fprintf(stderr, "Total create files: %d\n", cfilecount); 86f08c3bdfSopenharmony_ci fprintf(stderr, "Total delete files: %d\n", dfilecount); 87f08c3bdfSopenharmony_ci fprintf(stderr, "Total error : %d\n", errorcount); 88f08c3bdfSopenharmony_ci exit(1); 89f08c3bdfSopenharmony_ci } 90f08c3bdfSopenharmony_ci} 91f08c3bdfSopenharmony_ci 92f08c3bdfSopenharmony_ciint create_file(char *filename) 93f08c3bdfSopenharmony_ci{ 94f08c3bdfSopenharmony_ci int fd; 95f08c3bdfSopenharmony_ci int randomsize; 96f08c3bdfSopenharmony_ci char wbuf[MAXFSIZE]; 97f08c3bdfSopenharmony_ci if ((fd = creat(filename, S_IRWXU)) < 0) { 98f08c3bdfSopenharmony_ci errorcount++; 99f08c3bdfSopenharmony_ci return (-1); 100f08c3bdfSopenharmony_ci } 101f08c3bdfSopenharmony_ci if ((randomsize = box_muler(0, MAXFSIZE)) < 0) { 102f08c3bdfSopenharmony_ci randomsize = MAXFSIZE; 103f08c3bdfSopenharmony_ci } 104f08c3bdfSopenharmony_ci if (write(fd, wbuf, randomsize) < 0) { 105f08c3bdfSopenharmony_ci errorcount++; 106f08c3bdfSopenharmony_ci close(fd); 107f08c3bdfSopenharmony_ci return (-1); 108f08c3bdfSopenharmony_ci } 109f08c3bdfSopenharmony_ci cfilecount++; 110f08c3bdfSopenharmony_ci disk_space_pool -= randomsize; 111f08c3bdfSopenharmony_ci close(fd); 112f08c3bdfSopenharmony_ci return 0; 113f08c3bdfSopenharmony_ci} 114f08c3bdfSopenharmony_ci 115f08c3bdfSopenharmony_ci#include <sys/stat.h> 116f08c3bdfSopenharmony_ci#include <unistd.h> 117f08c3bdfSopenharmony_ci 118f08c3bdfSopenharmony_ciint delete_file(char *filename) 119f08c3bdfSopenharmony_ci{ 120f08c3bdfSopenharmony_ci struct stat buf; 121f08c3bdfSopenharmony_ci int st; 122f08c3bdfSopenharmony_ci st = stat(filename, &buf); 123f08c3bdfSopenharmony_ci if (st < 0) { 124f08c3bdfSopenharmony_ci errorcount++; 125f08c3bdfSopenharmony_ci return (-1); 126f08c3bdfSopenharmony_ci } 127f08c3bdfSopenharmony_ci disk_space_pool += buf.st_size; 128f08c3bdfSopenharmony_ci if (unlink(filename) < 0) { 129f08c3bdfSopenharmony_ci errorcount++; 130f08c3bdfSopenharmony_ci return (-1); 131f08c3bdfSopenharmony_ci } 132f08c3bdfSopenharmony_ci dfilecount++; 133f08c3bdfSopenharmony_ci return 0; 134f08c3bdfSopenharmony_ci} 135