#define RAND() ((unsigned int)((rand() & 0xff) | ((rand() & 0xff) << 8) | ((rand() & 0xff) << 16) | ((rand() & 0xff) << 24)))
#define GIGA (uint64_t)((uint64_t)0x400*(uint64_t)0x400*(uint64_t)0x400)
#define MAX_LENGTH_SECTION 0x1f
#define MAX_LENGTH_TEXT 0x7f
#define MAX_LENGTH_BUF 0xff
#define MAX_UINT32 0xffffffff
static char const* asz_mon[12] = {
"Jan","Feb","Mar","Apr","May","Jun",
"Jul","Aug","Sep","Oct","Nov","Dec"};
static char* gen_string1(char* sz_string, size_t u_length) {
unsigned char* psz_string = (unsigned char*)sz_string;
unsigned char* psz_string_end = (unsigned char*)sz_string + u_length;
for (; psz_string < psz_string_end; ++psz_string) {
*psz_string = 0x21 + (RAND() % 94);
}
*psz_string = '\0';
return sz_string;
}
static char* gen_string2(char* sz_string, size_t u_length) {
unsigned char c;
char* psz_string = sz_string;
char* psz_string_end = sz_string + u_length;
for (; psz_string < psz_string_end; ++psz_string) {
c = RAND() % 52;
if (c < 26) {
*psz_string = 'A' + c;
} else {
*psz_string = 'a' + (c -26);
}
}
*psz_string = '\0';
return sz_string;
}
int gen_data(FILE* fp, size_t u_GiB) {
char sz_buf[MAX_LENGTH_BUF+1];
unsigned int u_string_recs;
unsigned int u_hatena;
unsigned int u_xy_recs;
unsigned int u_num_recs;
char x_or_y;
time_t u_time
= time(NULL
); uint64_t u_pos;
for (;;) {
// ①セクション名
// ex. SECTION_NAME ①
::fprintf(fp
, "%s\x0a", gen_string2
(sz_buf
, 1 + (RAND
() % MAX_LENGTH_SECTION
)));
// ②セクション集計値
// ex. 11200 11200 2 Jun 9 23:23:00 2018 ②
// u_xy_recs = RAND() % 0x8000000 + 1;
u_xy_recs = RAND() % 0x8000 + 1;
u_hatena = u_xy_recs;
u_string_recs = RAND() % 0x20 + 1;
::sprintf(sz_buf
, "%s %.2d %02d:%02d:%02d %d", asz_mon
[pt_tm
->tm_mon
], pt_tm
->tm_mday
, pt_tm
->tm_hour
, pt_tm
->tm_min
, pt_tm
->tm_sec
, pt_tm
->tm_year
+1900); ::fprintf(fp
, "%u %u %u %s\x0a", u_xy_recs
, u_hatena
, u_string_recs
, sz_buf
);
// ③テキスト
// ex. This is pen. ③
// hello world. ③
for (unsigned int j = 0; j < u_string_recs; ++j) {
::fprintf(fp
, "%s\x0a", gen_string1
(sz_buf
, 1 + (RAND
() % MAX_LENGTH_TEXT
))); }
// ④数値
// ex. x 1 2 ④
for (unsigned int j = 0; j < u_xy_recs; ++j) {
x_or_y = (RAND() % 2) ? 'x' : 'y';
// u_num_recs = RAND() % 0x400 + 1;
u_num_recs = RAND() % 0x100 + 1;
::fprintf(fp
, "%c %u %u\x0a", x_or_y
, j
+ 1, u_num_recs
); if (RAND() % 2) {
// ⑤QQ 謎の行
// QQ subname -1 0 0 1 -21000000 600000 2
::fprintf(fp
, "QQ %s %d %d %d %d %d %d %d\x0a", gen_string2(sz_buf, 1 + (RAND() % MAX_LENGTH_SECTION)),
(int32_t)RAND(), (int32_t)RAND(), (int32_t)RAND(), (int32_t)RAND(), (int32_t)RAND(), (int32_t)RAND(), (int32_t)RAND());
}
if (x_or_y == 'x') {
for (unsigned int k = 0; k < u_num_recs; ++k) {
// 100 1 -2000 10
(int32_t)RAND(), (int32_t)RAND(), (int32_t)RAND(), (int32_t)RAND());
}
} else {
for (unsigned int k = 0; k < u_num_recs; ++k) {
// -100 10000
(int32_t)RAND(), (int32_t)RAND());
}
}
}
u_pos = ftello(fp);
if (u_pos > GIGA * (uint64_t)u_GiB) {
break;
}
}
return 0;
}
int main(int argc, char** argv) {
if (argc != 3) {
::fprintf(stderr
, "Usage: %s <filepath> <buffer size>\n", argv
[0]); return 1;
}
char* filename = argv[1];
size_t u_GiB
= ::strtoul(argv
[2], NULL
, 10);;
if (u_GiB == 0) {
::fprintf(stderr
, "Usage: %s <filepath> <GiB size>\n", argv
[0]); ::fprintf(stderr
, "<GiB size> must be greater than zero\n"); return 1;
}
FILE
* fp
= ::fopen(filename
, "w");
if (::gen_data(fp
, u_GiB
) < 0) {fclose(fp
); return -1;} return 0;
}
I2RlZmluZSBSQU5EKCkgKCh1bnNpZ25lZCBpbnQpKChyYW5kKCkgJiAweGZmKSB8ICgocmFuZCgpICYgMHhmZikgPDwgOCkgfCAoKHJhbmQoKSAmIDB4ZmYpIDw8IDE2KSB8ICgocmFuZCgpICYgMHhmZikgPDwgMjQpKSkKI2RlZmluZSBHSUdBICAgICAgICAgICAgICAgKHVpbnQ2NF90KSgodWludDY0X3QpMHg0MDAqKHVpbnQ2NF90KTB4NDAwKih1aW50NjRfdCkweDQwMCkKI2RlZmluZSBNQVhfTEVOR1RIX1NFQ1RJT04gMHgxZgojZGVmaW5lIE1BWF9MRU5HVEhfVEVYVCAgICAweDdmCiNkZWZpbmUgTUFYX0xFTkdUSF9CVUYgICAgIDB4ZmYKI2RlZmluZSBNQVhfVUlOVDMyICAgICAgICAgMHhmZmZmZmZmZgoKc3RhdGljIGNoYXIgY29uc3QqIGFzel9tb25bMTJdID0gewoiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwKIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJ9OwoKc3RhdGljIGNoYXIqIGdlbl9zdHJpbmcxKGNoYXIqIHN6X3N0cmluZywgc2l6ZV90IHVfbGVuZ3RoKSB7CgkKCXVuc2lnbmVkIGNoYXIqIHBzel9zdHJpbmcgPSAodW5zaWduZWQgY2hhciopc3pfc3RyaW5nOwoJdW5zaWduZWQgY2hhciogcHN6X3N0cmluZ19lbmQgPSAodW5zaWduZWQgY2hhciopc3pfc3RyaW5nICsgdV9sZW5ndGg7CgoJZm9yICg7IHBzel9zdHJpbmcgPCBwc3pfc3RyaW5nX2VuZDsgKytwc3pfc3RyaW5nKSB7CgkJKnBzel9zdHJpbmcgPSAweDIxICsgKFJBTkQoKSAlIDk0KTsKCX0KCgkqcHN6X3N0cmluZyA9ICdcMCc7CglyZXR1cm4gc3pfc3RyaW5nOwp9CgpzdGF0aWMgY2hhciogZ2VuX3N0cmluZzIoY2hhciogc3pfc3RyaW5nLCBzaXplX3QgdV9sZW5ndGgpIHsKCQoJdW5zaWduZWQgY2hhciBjOwoJY2hhciogcHN6X3N0cmluZyA9IHN6X3N0cmluZzsKCWNoYXIqIHBzel9zdHJpbmdfZW5kID0gc3pfc3RyaW5nICsgdV9sZW5ndGg7CgoJZm9yICg7IHBzel9zdHJpbmcgPCBwc3pfc3RyaW5nX2VuZDsgKytwc3pfc3RyaW5nKSB7CgkJYyA9IFJBTkQoKSAlIDUyOwoJCWlmIChjIDwgMjYpIHsKCQkJKnBzel9zdHJpbmcgPSAnQScgKyBjOwoJCX0gZWxzZSB7CgkJCSpwc3pfc3RyaW5nID0gJ2EnICsgKGMgLTI2KTsKCQl9Cgl9CgoJKnBzel9zdHJpbmcgPSAnXDAnOwoJcmV0dXJuIHN6X3N0cmluZzsKfQoKaW50IGdlbl9kYXRhKEZJTEUqIGZwLCBzaXplX3QgdV9HaUIpIHsKCgljaGFyIHN6X2J1ZltNQVhfTEVOR1RIX0JVRisxXTsKCgl1bnNpZ25lZCBpbnQgdV9zdHJpbmdfcmVjczsKCXVuc2lnbmVkIGludCB1X2hhdGVuYTsKCXVuc2lnbmVkIGludCB1X3h5X3JlY3M7Cgl1bnNpZ25lZCBpbnQgdV9udW1fcmVjczsKCWNoYXIgeF9vcl95OwoJdGltZV90IHVfdGltZSA9IHRpbWUoTlVMTCk7Cgl0bSogICAgcHRfdG0gPSA6OmxvY2FsdGltZSgmdV90aW1lKTsKCXVpbnQ2NF90IHVfcG9zOwoKCTo6c3JhbmQoKHVuc2lnbmVkIGludCl0aW1lKE5VTEwpKTsKCglmb3IgKDs7KSB7CgkJLy8g4pGg772+77247728772u776d5ZCNCgkJLy8gZXguIFNFQ1RJT05fTkFNReOAgOKRoAoJCTo6ZnByaW50ZihmcCwgIiVzXHgwYSIsIGdlbl9zdHJpbmcyKHN6X2J1ZiwgMSArIChSQU5EKCkgJSBNQVhfTEVOR1RIX1NFQ1RJT04pKSk7CgoJCS8vIOKRoe+9vu+9uO+9vO+9ru++nembhuioiOWApAoJCS8vIGV4LiAxMTIwMCAxMTIwMCAyIEp1biAgOSAyMzoyMzowMCAyMDE444CA4pGhCi8vCQl1X3h5X3JlY3MgPSBSQU5EKCkgJSAweDgwMDAwMDAgKyAxOwoJCXVfeHlfcmVjcyA9IFJBTkQoKSAlIDB4ODAwMCArIDE7CgkJdV9oYXRlbmEgID0gdV94eV9yZWNzOwoJCXVfc3RyaW5nX3JlY3MgPSBSQU5EKCkgJSAweDIwICsgMTsKCQk6OnNwcmludGYoc3pfYnVmLCAiJXMgJS4yZCAlMDJkOiUwMmQ6JTAyZCAlZCIsIGFzel9tb25bcHRfdG0tPnRtX21vbl0sIHB0X3RtLT50bV9tZGF5LCBwdF90bS0+dG1faG91ciwgcHRfdG0tPnRtX21pbiwgcHRfdG0tPnRtX3NlYywgcHRfdG0tPnRtX3llYXIrMTkwMCk7CgkJOjpmcHJpbnRmKGZwLCAiJXUgJXUgJXUgJXNceDBhIiwgdV94eV9yZWNzLCB1X2hhdGVuYSwgdV9zdHJpbmdfcmVjcywgc3pfYnVmKTsKCQoJCS8vIOKRou++g++9t++9ve++hAoJCS8vIGV4LiBUaGlzIGlzIHBlbi7jgIDikaIKCQkvLyAgICAgaGVsbG8gd29ybGQu44CA4pGiCgkJZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCB1X3N0cmluZ19yZWNzOyArK2opIHsKCQkJOjpmcHJpbnRmKGZwLCAiJXNceDBhIiwgZ2VuX3N0cmluZzEoc3pfYnVmLCAxICsgKFJBTkQoKSAlIE1BWF9MRU5HVEhfVEVYVCkpKTsKCQl9CgoJCS8vIOKRo+aVsOWApAoJCS8vIGV4LiB4IDEgMuOAgOKRowoJCWZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgdV94eV9yZWNzOyArK2opIHsKCQkJeF9vcl95ID0gKFJBTkQoKSAlIDIpID8gJ3gnIDogJ3knOwovLwkJCXVfbnVtX3JlY3MgPSBSQU5EKCkgJSAweDQwMCArIDE7CgkJCXVfbnVtX3JlY3MgPSBSQU5EKCkgJSAweDEwMCArIDE7CgkJCTo6ZnByaW50ZihmcCwgIiVjICV1ICV1XHgwYSIsIHhfb3JfeSwgaiArIDEsIHVfbnVtX3JlY3MpOwoJCQlpZiAoUkFORCgpICUgMikgewoJCQkJLy8g4pGkUVEg6KyO44Gu6KGMCgkJCQkvLyBRUSBzdWJuYW1lIC0xIDAgMCAxIC0yMTAwMDAwMCA2MDAwMDAgMgoJCQkJOjpmcHJpbnRmKGZwLCAiUVEgJXMgJWQgJWQgJWQgJWQgJWQgJWQgJWRceDBhIiwKCQkJCQlnZW5fc3RyaW5nMihzel9idWYsIDEgKyAoUkFORCgpICUgTUFYX0xFTkdUSF9TRUNUSU9OKSksCgkJCQkJKGludDMyX3QpUkFORCgpLCAoaW50MzJfdClSQU5EKCksIChpbnQzMl90KVJBTkQoKSwgKGludDMyX3QpUkFORCgpLCAoaW50MzJfdClSQU5EKCksIChpbnQzMl90KVJBTkQoKSwgKGludDMyX3QpUkFORCgpKTsKCQkJfQoJCQlpZiAoeF9vcl95ID09ICd4JykgewoJCQkJZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsgPCB1X251bV9yZWNzOyArK2spIHsKCQkJCQkvLyAxMDAgMSAtMjAwMCAxMAoJCQkJCTo6ZnByaW50ZihmcCwgIiVkICVkICVkICVkXHgwYSIsCgkJCQkJCShpbnQzMl90KVJBTkQoKSwgKGludDMyX3QpUkFORCgpLCAoaW50MzJfdClSQU5EKCksIChpbnQzMl90KVJBTkQoKSk7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQlmb3IgKHVuc2lnbmVkIGludCBrID0gMDsgayA8IHVfbnVtX3JlY3M7ICsraykgewoJCQkJCS8vIC0xMDAgMTAwMDAKCQkJCQk6OmZwcmludGYoZnAsICIlZCAlZFx4MGEiLAoJCQkJCQkoaW50MzJfdClSQU5EKCksIChpbnQzMl90KVJBTkQoKSk7CgkJCQl9CgkJCX0KCQl9CgoJCXVfcG9zID0gZnRlbGxvKGZwKTsKCgkJaWYgKHVfcG9zID4gR0lHQSAqICh1aW50NjRfdCl1X0dpQikgewoJCQlicmVhazsKCQl9Cgl9CgoJcmV0dXJuIDA7Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewoKCWlmIChhcmdjICE9IDMpIHsKCQk6OmZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxmaWxlcGF0aD4gPGJ1ZmZlciBzaXplPlxuIiwgYXJndlswXSk7CgkJcmV0dXJuIDE7Cgl9CgoJY2hhciogZmlsZW5hbWUgPSBhcmd2WzFdOwoJc2l6ZV90IHVfR2lCID0gOjpzdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDEwKTs7CgoJaWYgKHVfR2lCID09IDApIHsKCQk6OmZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxmaWxlcGF0aD4gPEdpQiBzaXplPlxuIiwgYXJndlswXSk7CgkJOjpmcHJpbnRmKHN0ZGVyciwgIjxHaUIgc2l6ZT4gbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyb1xuIik7CgkJcmV0dXJuIDE7Cgl9CgoJRklMRSogZnAgPSA6OmZvcGVuKGZpbGVuYW1lLCAidyIpOwoKCWlmICg6Omdlbl9kYXRhKGZwLCB1X0dpQikgPCAwKSB7ZmNsb3NlKGZwKTsgcmV0dXJuIC0xO30KCWZjbG9zZShmcCk7CglyZXR1cm4gMDsKfQo=
prog.c:12:43: error: unknown type name ‘size_t’
static char* gen_string1(char* sz_string, size_t u_length) {
^~~~~~
prog.c:25:43: error: unknown type name ‘size_t’
static char* gen_string2(char* sz_string, size_t u_length) {
^~~~~~
prog.c:44:14: error: unknown type name ‘FILE’
int gen_data(FILE* fp, size_t u_GiB) {
^~~~
prog.c:44:24: error: unknown type name ‘size_t’
int gen_data(FILE* fp, size_t u_GiB) {
^~~~~~
prog.c: In function ‘main’:
prog.c:122:3: error: expected expression before ‘:’ token
::fprintf(stderr, "Usage: %s <filepath> <buffer size>\n", argv[0]);
^
prog.c:127:2: error: unknown type name ‘size_t’
size_t u_GiB = ::strtoul(argv[2], NULL, 10);;
^~~~~~
prog.c:127:17: error: expected expression before ‘:’ token
size_t u_GiB = ::strtoul(argv[2], NULL, 10);;
^
prog.c:130:3: error: expected expression before ‘:’ token
::fprintf(stderr, "Usage: %s <filepath> <GiB size>\n", argv[0]);
^
prog.c:131:3: error: expected expression before ‘:’ token
::fprintf(stderr, "<GiB size> must be greater than zero\n");
^
prog.c:135:2: error: unknown type name ‘FILE’
FILE* fp = ::fopen(filename, "w");
^~~~
prog.c:135:13: error: expected expression before ‘:’ token
FILE* fp = ::fopen(filename, "w");
^
prog.c:137:6: error: expected expression before ‘:’ token
if (::gen_data(fp, u_GiB) < 0) {fclose(fp); return -1;}
^
prog.c:137:34: warning: implicit declaration of function ‘fclose’ [-Wimplicit-function-declaration]
if (::gen_data(fp, u_GiB) < 0) {fclose(fp); return -1;}
^~~~~~
prog.c:126:8: warning: unused variable ‘filename’ [-Wunused-variable]
char* filename = argv[1];
^~~~~~~~
At top level:
prog.c:8:20: warning: ‘asz_mon’ defined but not used [-Wunused-variable]
static char const* asz_mon[12] = {
^~~~~~~