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