java变长数据实现列表_C语言,基于单向链表实现,变长动态数据缓冲区(线程安全) ---- 类似java的StringBuffer --- 亲测OK...

1 //test2.c

2

3 #include

4 #include

5 #include

6 #include

7 #include

8 #include

9 #include "LIB_bytes_buffer.h"

10

11

12 #include

13

14 #include "LIB_bytes_buffer_apply.h"

15

16

17 static void *g_uart_buffer_handler =NULL;18 static void *g_uart_buffer_handler2 =NULL;19

20 //return 0成功, -1失败

21 static int XXXX_task_init(void)22 {23

24 g_uart_buffer_handler = BytesBuffer_create(); //创建缓冲区对象

25 XXXX_print_ln_I("BYTESBUFFER_create,h=%x.", g_uart_buffer_handler);26 if (NULL ==g_uart_buffer_handler)27 {28 XXXX_print_ln_E("BYTESBUFFER_create Failed.");29 }30

31

32 g_uart_buffer_handler2 = BytesBuffer_create(); //创建缓冲区对象

33

34 return 0;35 }36

37 int give_me_more_data(void)38 {39 unsigned char buff[1024] = {'\0'};40 int ret_read = 0;41 int ret_append = 0;42

43 memset((void *)buff, 0, sizeof(buff));44 ret_read = BytesBuffer_read(g_uart_buffer_handler2, buff, sizeof(buff) - 1);45 if (0 >=ret_read) {46 returnret_read;47 }48 XXXX_print_ln_W(",h=%x,BYTESBUFFER_read_ret=%d,expect_read_len=%u", g_uart_buffer_handler2, ret_read, sizeof(buff) - 1);49

50 ret_append = BytesBuffer_add(g_uart_buffer_handler, buff, ret_read, 1);51 XXXX_print_ln_W(",h=%x,BYTESBUFFER_append_ret=%d,append_size=%u", g_uart_buffer_handler, ret_append, ret_read);52

53 returnret_read;54 }55

56 int XXXX_task_buffer_append(void *buffer, unsigned shortsize)57 {58 int ret = -1;59

60 /*参数检查*/

61 if (NULL == buffer || 0 ==size)62 {63 XXXX_print_ln_E("wrong para.");64 return -1;65 }66

67 ret = BytesBuffer_add(g_uart_buffer_handler2, buffer, (unsigned int)size, 1);68 XXXX_print_ln_W(",h=%x,BYTESBUFFER_append_ret=%d,append_size=%u, buffer=%s", g_uart_buffer_handler2, ret, (unsigned int)size, buffer);69

70 returnret;71 }72

73 int file_w(unsigned char *in_buf, unsigned intlen)74 {75 static int fp_w = -1;76

77 if (-1 ==fp_w)78 {79 fp_w = open("./test2_w.txt", O_RDWR|O_CREAT|O_TRUNC);80 XXXX_print_ln_I("fp_w=%d%s", fp_w, "./test2_w.txt");81 }82

83 write(fp_w, in_buf, len);84

85 return 0;86 }87

88 int file_r(unsigned char *in_buf, unsigned intlen)89 {90 static int fp_r = -1;91

92 if (-1 ==fp_r)93 {94 fp_r = open("./test2_r.txt", O_RDWR|O_CREAT|O_TRUNC);95 XXXX_print_ln_I("fp_r=%d%s", fp_r, "./test2_r.txt");96 }97

98 if (0

102 return 0;103 }104

105

106

107 void *thr_fn2(void *arg)108

109 {110 int ret_next_item = 0;111 int ret_parser_each = 0;112 unsigned char buff[2048] = {'\0'};113

114 for( ; ; )115 {116 //XXXX_sleep_ms(30);

117

118

119 give_me_more_data();120

121 memset((void *)buff, 0, sizeof(buff));122 ret_next_item = XXXX_LIB_BYTESBUFFER_read_next_item(g_uart_buffer_handler, buff, sizeof(buff), 50);123

124 if (0 >=ret_next_item) {125 continue;126 }127

128

129 XXXX_print_ln_W("\t\t\t\t\t\trecv[uart0]

133 file_r(buff, ret_next_item);134 }135

136 }137

138 void XXXX_MINORNETHELPER_AT_PARSER_parser(char *buff, intlen)139 {140 XXXX_task_buffer_append(buff, len);141 file_w(buff, len);142 //usleep(1000 * 50);

143 }144

145 void test0(void)146 {147

148 char *buff6 = "+SKTRPT=1,6,1.1.1.1,3333\r\n\r\nqwert+OK+ERR5"; //长度不够的测试用例

149 XXXX_MINORNETHELPER_AT_PARSER_parser(buff6, strlen(buff6));150 }151

152 void test1(void)153 {154 char *buff = "+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE";155

156 XXXX_MINORNETHELPER_AT_PARSER_parser(buff, strlen(buff));157 }158

159 void test2(void)160 {161 char *buff = "+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeABCDEF";162

163 XXXX_MINORNETHELPER_AT_PARSER_parser(buff, strlen(buff));164 }165

166 void test3(void)167 {168 char *buff = "+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeABCDEF+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeAB";169

170 XXXX_MINORNETHELPER_AT_PARSER_parser(buff, strlen(buff));171 }172

173

174

175 void test4(void)176 {177 char *buff1 = "+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeABCDEF+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeAB";178 char *buff2 = "liuy";179

180 XXXX_MINORNETHELPER_AT_PARSER_parser(buff1, strlen(buff1));181 XXXX_MINORNETHELPER_AT_PARSER_parser(buff2, strlen(buff2));182 }183

184 void test5(void)185 {186 char *buff1 = "+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeABCDEF+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeAB";187 char *buff2 = "liuy+SKTRPT=1,13,1.1.1.1,3333\r\n\r\nabcdeABCDEFG";188

189 XXXX_MINORNETHELPER_AT_PARSER_parser(buff1, strlen(buff1));190 XXXX_MINORNETHELPER_AT_PARSER_parser(buff2, strlen(buff2));191 }192

193

194 void test6(void)195 {196 char *buff1 = "go+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDQ+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeABCDEF+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeAB";197 char *buff2 = "liuy+SKTRPT=1,13,1.1.1.1,3333\r\n\r\nabcdeABCDEFG";198

199 XXXX_MINORNETHELPER_AT_PARSER_parser(buff1, strlen(buff1));200 XXXX_MINORNETHELPER_AT_PARSER_parser(buff2, strlen(buff2));201 }202

203 void test7(void)204 {205 char *buff1 = "go+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeABCDEF+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeAB";206 XXXX_MINORNETHELPER_AT_PARSER_parser(buff1, strlen(buff1));207

208 char *buff2 = "liuy+SKTRPT=1,13,1.1.1.1,3333\r\n\r\nabcdeABCDEFG+OK1";209 XXXX_MINORNETHELPER_AT_PARSER_parser(buff2, strlen(buff2));210

211 char *buff3 = "+SKTRPT=1,4,1.1.1.1,3333\r\n\r\nqwer+OK2";212 XXXX_MINORNETHELPER_AT_PARSER_parser(buff3, strlen(buff3));213

214 char *buff4 = "+ERR3+SKTRPT=1,5,1.1.1.1,3333\r\n\r\nqwert+OK4";215 XXXX_MINORNETHELPER_AT_PARSER_parser(buff4, strlen(buff4));216

217 char *buff5 = "+SKTRPT=1,5,1.1.1.1,3333\r\n\r\nqwert";218 XXXX_MINORNETHELPER_AT_PARSER_parser(buff5, strlen(buff5));219

220 char *buff6 = "+SKTRPT=1,6,1.1.1.1,3333\r\n\r\nqwerty+OK+ERR5";221 XXXX_MINORNETHELPER_AT_PARSER_parser(buff6, strlen(buff6));222

223 char *buff7 = "+OK6+ERR7";224 XXXX_MINORNETHELPER_AT_PARSER_parser(buff7, strlen(buff7));225

226 char *buff8 = "+OK8";227 XXXX_MINORNETHELPER_AT_PARSER_parser(buff8, strlen(buff8));228 }229

230 void test8(void)231 {232 char *buff1 = "+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeABCDEF+SKTRPT=1,360,1.1.1.1,3333\r\n\r\nabcdeAB";233 char *buff2 = "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkklllll";234 char *buff3 = "liuy";235

236 char *buff4 = "AAaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkklllll";237 char *buff5 = "YYYY";238 char *buff6 = "BBaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkklOVER";239

240 XXXX_MINORNETHELPER_AT_PARSER_parser(buff1, strlen(buff1));241 XXXX_MINORNETHELPER_AT_PARSER_parser(buff2, strlen(buff2));242 XXXX_MINORNETHELPER_AT_PARSER_parser(buff3, strlen(buff3));243 XXXX_MINORNETHELPER_AT_PARSER_parser(buff4, strlen(buff4));244 XXXX_MINORNETHELPER_AT_PARSER_parser(buff5, strlen(buff5));245 XXXX_MINORNETHELPER_AT_PARSER_parser(buff6, strlen(buff6));246 }247

248 void test9(void)249 {250 char *buff1 = "+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeABCDEF+SKTRPT=1,360,1.1.1.1,3333\r\n\r\nabcdeAB";251 char *buff2 = "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkklllll";252 char *buff3 = "liuy";253

254 char *buff4 = "AAaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkklllll";255 char *buff5 = "YYYY";256 char *buff6 = "BBaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkklOVER+SKTR";257 char *buff7 = "PT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE";258

259 XXXX_MINORNETHELPER_AT_PARSER_parser(buff1, strlen(buff1));260 XXXX_MINORNETHELPER_AT_PARSER_parser(buff2, strlen(buff2));261 XXXX_MINORNETHELPER_AT_PARSER_parser(buff3, strlen(buff3));262 XXXX_MINORNETHELPER_AT_PARSER_parser(buff4, strlen(buff4));263 XXXX_MINORNETHELPER_AT_PARSER_parser(buff5, strlen(buff5));264 XXXX_MINORNETHELPER_AT_PARSER_parser(buff6, strlen(buff6));265 XXXX_MINORNETHELPER_AT_PARSER_parser(buff7, strlen(buff7));266 }267

268 void test10(void)269 {270 char *buff1 = "+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE+SKTRPT=1,11,1.1.1.1,3333\r\n\r\nabcdeABCDEF+SKTRPT=1,360,1.1.1.1,3333\r\n\r\nabcdeAB";271 char *buff2 = "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkklllll";272 char *buff3 = "liuy";273

274 char *buff4 = "AAaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkklllll";275 char *buff5 = "YYYY";276 char *buff6 = "BBaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkklOVER+SKTR";277 char *buff7 = "PT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDV";278

279 XXXX_MINORNETHELPER_AT_PARSER_parser(buff1, strlen(buff1));280 XXXX_MINORNETHELPER_AT_PARSER_parser(buff2, strlen(buff2));281 XXXX_MINORNETHELPER_AT_PARSER_parser(buff3, strlen(buff3));282 XXXX_MINORNETHELPER_AT_PARSER_parser(buff4, strlen(buff4));283 XXXX_MINORNETHELPER_AT_PARSER_parser(buff5, strlen(buff5));284 XXXX_MINORNETHELPER_AT_PARSER_parser(buff6, strlen(buff6));285

286 sleep(2);287 XXXX_MINORNETHELPER_AT_PARSER_parser(buff7, strlen(buff7));288 }289

290 void test11_pressure(void)291 {292 char *buff[] = {"+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE",293 "+OK",294 "+OK=1",295 "+OK=22",296 "+ERR"};297 unsigned int count = 0;298 unsigned int rand_str = 0;299

300 count = sizeof(buff) / sizeof(char *);301

302 for(; ; ) {303 rand_str = rand() %count;304 XXXX_MINORNETHELPER_AT_PARSER_parser(buff[rand_str], strlen(buff[rand_str]));305 sleep(1);306 }307

308 }309

310 void test12_pressure_normal(void)311 {312 char *buff[] = {"+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCDE",313 "+OK",314 "+OK=1",315 "+OK=22",316 "+ERR"};317 unsigned int count = 0;318 unsigned int rand_str = 0;319 unsigned int bf_len = 0;320 unsigned int already_set_len = 0;321 unsigned int will_cpy_len = 0;322 int is_full = 0;323 int youbiao = 0;324 int index = 0;325 char bf[17] = {'\0'};326

327 count = sizeof(buff) / sizeof(char *);328 bf_len = sizeof(bf);329 already_set_len = 0;330

331 for (index = 0; ; index++) { //index < 20

332 if (0 ==is_full) {333 rand_str = rand() %count;334

335 will_cpy_len = XXXX_MIN(bf_len -already_set_len, strlen(buff[rand_str]));336 memcpy(bf +already_set_len, buff[rand_str], will_cpy_len);337 youbiao =will_cpy_len;338 } else{339 already_set_len = 0;340 is_full = 0;341 memset(bf, 0, bf_len);342

343 if (youbiao >=strlen(buff[rand_str])) {344 continue;345 } else{346 will_cpy_len = XXXX_MIN(bf_len - already_set_len, strlen(buff[rand_str]) -youbiao);347 memcpy(bf + already_set_len, buff[rand_str] +youbiao, will_cpy_len);348 youbiao +=will_cpy_len;349 }350

351 }352 already_set_len +=will_cpy_len;353

354 if (already_set_len >=bf_len)355 {356 XXXX_MINORNETHELPER_AT_PARSER_parser(bf, bf_len);357 is_full = 1;358 }359

360 }361 }362

363 void test13_pressure_abnormal(void)364 {365 char *buff[] = {"+SKTRPT=1,10,1.1.1.1,3333\r\n\r\nabcdeABCD", //本条消息字节丢失

366 "+OK",367 "+OK=1",368 "+OK=22",369 "+ERR"};370 unsigned int count = 0;371 unsigned int rand_str = 0;372 unsigned int bf_len = 0;373 unsigned int already_set_len = 0;374 unsigned int will_cpy_len = 0;375 int is_full = 0;376 int youbiao = 0;377 int index = 0;378 char bf[17] = {'\0'};379

380 count = sizeof(buff) / sizeof(char *);381 bf_len = sizeof(bf);382 already_set_len = 0;383

384 srand((unsigned int)time(NULL));385

386 for (index = 0; ; index++) { //index < 10

387 if (0 ==is_full) {388 rand_str = rand() %count;389

390 will_cpy_len = XXXX_MIN(bf_len -already_set_len, strlen(buff[rand_str]));391 memcpy(bf +already_set_len, buff[rand_str], will_cpy_len);392 youbiao =will_cpy_len;393 } else{394 already_set_len = 0;395 is_full = 0;396 memset(bf, 0, bf_len);397

398 if (youbiao >=strlen(buff[rand_str])) {399 continue;400 } else{401 will_cpy_len = XXXX_MIN(bf_len - already_set_len, strlen(buff[rand_str]) -youbiao);402 memcpy(bf + already_set_len, buff[rand_str] +youbiao, will_cpy_len);403 youbiao +=will_cpy_len;404 }405

406 }407 already_set_len +=will_cpy_len;408

409 if (already_set_len >=bf_len)410 {411 XXXX_MINORNETHELPER_AT_PARSER_parser(bf, bf_len);412 is_full = 1;413 }414

415 }416 }417

418 void test14(void)419 {420

421 char *buff6 = "+SKTRPT=1,6,1.1.1.1,3333\r\n\r\n\t\r\t\t\tA+OK+ERR5"; //不可见字符测试

422 XXXX_MINORNETHELPER_AT_PARSER_parser(buff6, 42);423

424 }425

426 void test15(void)427 {428

429 char *buff6 = "+SKTRPT=1,6,1.1.1.1,3333\r\n\r\naaaaabAAAAAAAAA11111111112222222222333333333344444444445555+5555556666666666777777777788888888889999999999000000000011111111112222222222333333333344444444445555+55555566666666667777777777888888888899999999990000000000+OK+ERR5"; //多出来的数据里有+

430 XXXX_MINORNETHELPER_AT_PARSER_parser(buff6, strlen(buff6));431

432 }433

434 int main(int argc, char *argv[])435 {436

437 pthread_t ntid;438 int err = 0;439

440 XXXX_task_init();441

442 err = pthread_create(&ntid, NULL, thr_fn2, NULL);443 if(err != 0){444 XXXX_print_ln_I("can't create thread: %s",strerror(err));445 }446

447 //test1();

448 test12_pressure_normal();449

450 for(; ;)451 {452 usleep(1000 * 1000);453 printf("...");454 continue;455 }456

457 return 0;458 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值