Mercurial > hg > Members > kono > Cerium
comparison TaskManager/Test/test_render/lindaapi.cc @ 532:cd2985cd3461
add .hgignore
modify test_render/Makefile.linux
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 21 Oct 2009 11:55:16 +0900 |
parents | bc5b3d327083 |
children |
comparison
equal
deleted
inserted
replaced
531:fab6f20021c9 | 532:cd2985cd3461 |
---|---|
1 // $Id: lindaapi.c,v 1.9 2006/04/03 08:17:11 kono Exp $ | 1 // $Id: lindaapi.c,v 1.9 2006/04/03 08:17:11 kono Exp $ |
2 // | 2 // |
3 | 3 |
4 /*---------------------------------------------------------------------- | 4 /*---------------------------------------------------------------------- |
5 インクルードファイル読み込み | 5 ゃ潟若<ゃ茯粋昭 |
6 ----------------------------------------------------------------------*/ | 6 ----------------------------------------------------------------------*/ |
7 #include <sys/file.h> | 7 #include <sys/file.h> |
8 #include <stdio.h> | 8 #include <stdio.h> |
9 #include <stdlib.h> | 9 #include <stdlib.h> |
10 #include <string.h> | 10 #include <string.h> |
49 #define PRINT_INTERVAL 4 | 49 #define PRINT_INTERVAL 4 |
50 | 50 |
51 /*-------------------------------------------------------------------/ | 51 /*-------------------------------------------------------------------/ |
52 void | 52 void |
53 count_packet (char type): | 53 count_packet (char type): |
54 パケットの送受信カウントする | 54 宴篆<潟 |
55 | 55 |
56 引き数: | 56 綣: |
57 type - 送信、受信 (char型: s,r) | 57 type - 篆<篆 (char: s,r) |
58 /-------------------------------------------------------------------*/ | 58 /-------------------------------------------------------------------*/ |
59 void count_packet(char type) | 59 void count_packet(char type) |
60 { | 60 { |
61 static int send_packet=-1,receive_packet=0; | 61 static int send_packet=-1,receive_packet=0; |
62 static struct timeval start,now,previous; | 62 static struct timeval start,now,previous; |
93 #define unix_open open | 93 #define unix_open open |
94 #define unix_read_w read | 94 #define unix_read_w read |
95 /*-------------------------------------------------------------------/ | 95 /*-------------------------------------------------------------------/ |
96 int | 96 int |
97 unix_read (int fd, char *buf, unsigned int size): | 97 unix_read (int fd, char *buf, unsigned int size): |
98 サーバからTUPLEを読みこむ。 | 98 泣若TUPLE茯帥 |
99 現在は使われていない。 | 99 憜篏帥 |
100 | 100 |
101 引き数: | 101 綣: |
102 fd - サーバのファイルディスクリプタ | 102 fd - 泣若<ゃc鴻 |
103 buf - 受け取るデータの格納場所(TUPLEヘッダ含む) | 103 buf - 若帥主贋(TUPLE) |
104 size - bufのbyte数 | 104 size - bufbyte |
105 返り値: | 105 菴: |
106 読みこんだbyte数 | 106 茯帥byte |
107 /-------------------------------------------------------------------*/ | 107 /-------------------------------------------------------------------*/ |
108 int | 108 int |
109 unix_read(int fd,char *buf,unsigned int size) { | 109 unix_read(int fd,char *buf,unsigned int size) { |
110 int len,a,i; | 110 int len,a,i; |
111 if(read(fd,buf,INT_SIZE)!=INT_SIZE) { // INT_SIZE is sizeof(int) | 111 if(read(fd,buf,INT_SIZE)!=INT_SIZE) { // INT_SIZE is sizeof(int) |
127 } | 127 } |
128 | 128 |
129 /*-------------------------------------------------------------------/ | 129 /*-------------------------------------------------------------------/ |
130 int | 130 int |
131 unix_write (int fd, unsigned char *buf, unsigned int size): | 131 unix_write (int fd, unsigned char *buf, unsigned int size): |
132 サーバへTUPLEを送る。 | 132 泣若TUPLE |
133 | 133 |
134 引き数: | 134 綣: |
135 fd - サーバのファイルディスクリプタ | 135 fd - 泣若<ゃc鴻 |
136 buf - サーバへ送るデータ(TUPLEヘッダ含む) | 136 buf - 泣若檎若(TUPLE) |
137 size - bufのbyte数 | 137 size - bufbyte |
138 返り値: | 138 菴: |
139 送った(書きこんだ)データのbyte数 | 139 c(吾)若帥byte |
140 /-------------------------------------------------------------------*/ | 140 /-------------------------------------------------------------------*/ |
141 int | 141 int |
142 unix_write(int fd,unsigned char *buf,unsigned int size) { | 142 unix_write(int fd,unsigned char *buf,unsigned int size) { |
143 int i,nsize; | 143 int i,nsize; |
144 nsize = htonl(size); | 144 nsize = htonl(size); |
165 | 165 |
166 | 166 |
167 /*-------------------------------------------------------------------/ | 167 /*-------------------------------------------------------------------/ |
168 int | 168 int |
169 start_linda (char * hostname): | 169 start_linda (char * hostname): |
170 サーバとのコネクションを確立し、COMMANDキューとREPLYキューの | 170 泣若潟激с潟腆榊COMMANDャ若REPLYャ若 |
171 初期化を行なう。 | 171 茵 |
172 | 172 |
173 引き数: | 173 綣: |
174 hostname - サーバのホスト名 | 174 hostname - 泣若鴻 |
175 返り値: | 175 菴: |
176 コネクション確立が成功するとそのファイルディスクリプタを返す。 | 176 潟激с括∈腴<ゃc鴻帥菴 |
177 失敗すると -1 を返す。 | 177 紊掩 -1 菴 |
178 /-------------------------------------------------------------------*/ | 178 /-------------------------------------------------------------------*/ |
179 int | 179 int |
180 start_linda(char * hostname){ | 180 start_linda(char * hostname){ |
181 char *p; | 181 char *p; |
182 const char *hostname0 = "/tmp/ldserv"; | 182 const char *hostname0 = "/tmp/ldserv"; |
253 } | 253 } |
254 | 254 |
255 /*-------------------------------------------------------------------/ | 255 /*-------------------------------------------------------------------/ |
256 int | 256 int |
257 psx_out (unsigned int id, unsigned char *data, unsigned int size): | 257 psx_out (unsigned int id, unsigned char *data, unsigned int size): |
258 outコマンドをCOMMANDキューへ溜める。 | 258 out潟潟COMMANDャ若御 |
259 | 259 |
260 引き数: | 260 綣: |
261 id - TUPLE SpaceのID | 261 id - TUPLE SpaceID |
262 data - 送信するデータ | 262 data - 篆<若 |
263 size - dataのサイズ | 263 size - data泣ゃ |
264 返り値: | 264 菴: |
265 シーケンス番号 | 265 激若宴潟合 |
266 /-------------------------------------------------------------------*/ | 266 /-------------------------------------------------------------------*/ |
267 int | 267 int |
268 psx_out(unsigned int id, unsigned char *data, unsigned int size){ | 268 psx_out(unsigned int id, unsigned char *data, unsigned int size){ |
269 if (psx_queue(id, size, data, 'o', NULL, NULL) == FAIL){ | 269 if (psx_queue(id, size, data, 'o', NULL, NULL) == FAIL){ |
270 return(FAIL); | 270 return(FAIL); |
276 | 276 |
277 /*-------------------------------------------------------------------/ | 277 /*-------------------------------------------------------------------/ |
278 int | 278 int |
279 psx_ld (unsigned int id, char mode, void(*callback)(char*,void*), | 279 psx_ld (unsigned int id, char mode, void(*callback)(char*,void*), |
280 void * obj): | 280 void * obj): |
281 in,read,waitなどの受信コマンドをCOMMANDキューへ溜める。 | 281 in,read,wait篆<潟潟COMMANDャ若御 |
282 psx_in,psx_rd,psx_wait_rdなどに置き換えられている。 | 282 psx_in,psx_rd,psx_wait_rd臀 |
283 | 283 |
284 引き数: | 284 綣: |
285 id - TUPLE SpaceのID | 285 id - TUPLE SpaceID |
286 mode - i,r,w の文字を取り、各々in,read,waitを表している。 | 286 mode - i,r,w 絖in,read,wait茵 |
287 callback - コールバックを使用する場合の関数へのポインタ。 | 287 callback - 潟若篏睡翫∽違吾ゃ潟帥 |
288 使用しない場合はNULLをいれる。 | 288 篏睡翫NULL |
289 obj - コールバックで用いる関数の引き数。 | 289 obj - 潟若х∽違綣違 |
290 返り値: | 290 菴: |
291 psx_queue内でmallocされたREPLY構造体へのポインタ | 291 psx_queuemallocREPLY罕篏吾ゃ潟 |
292 /-------------------------------------------------------------------*/ | 292 /-------------------------------------------------------------------*/ |
293 int | 293 int |
294 psx_ld(unsigned int id, char mode,void(*callback)(char *,void *),void * obj){ | 294 psx_ld(unsigned int id, char mode,void(*callback)(char *,void *),void * obj){ |
295 int r; | 295 int r; |
296 if ((r=psx_queue(id, 0, NULL, mode, callback, obj)) == FAIL){ | 296 if ((r=psx_queue(id, 0, NULL, mode, callback, obj)) == FAIL){ |
300 } | 300 } |
301 | 301 |
302 /*-------------------------------------------------------------------/ | 302 /*-------------------------------------------------------------------/ |
303 unsigned char * | 303 unsigned char * |
304 psx_reply (int seq): | 304 psx_reply (int seq): |
305 サーバから答えが来たデータを返す。 | 305 泣若膈ャ若帥菴 |
306 | 306 |
307 引き数: | 307 綣: |
308 seq - psx_ld()が返した値。 | 308 seq - psx_ld()菴ゃ |
309 返り値: | 309 菴: |
310 seqに対応したデータを返す。データをまだ受信していない場合は | 310 seq絲上若帥菴若帥障篆<翫 |
311 NULLを返す。 | 311 NULL菴 |
312 /-------------------------------------------------------------------*/ | 312 /-------------------------------------------------------------------*/ |
313 unsigned char * | 313 unsigned char * |
314 psx_reply(int seq){ | 314 psx_reply(int seq){ |
315 REPLY *p, *q; | 315 REPLY *p, *q; |
316 char *ans; | 316 char *ans; |
354 } | 354 } |
355 | 355 |
356 /*-------------------------------------------------------------------/ | 356 /*-------------------------------------------------------------------/ |
357 void | 357 void |
358 psx_sync_n (): | 358 psx_sync_n (): |
359 サーバとデータの送受信をする。COMMANDキューに溜まったデータを | 359 泣若若帥篆<COMMANDャ若羣障c若帥 |
360 送信し、サーバから送られて来たデータを対応するREPLYへいれる。 | 360 篆<泣若ャ若帥絲上REPLY吾 |
361 /-------------------------------------------------------------------*/ | 361 /-------------------------------------------------------------------*/ |
362 void | 362 void |
363 psx_sync_n(){ | 363 psx_sync_n(){ |
364 int acount; | 364 int acount; |
365 COMMAND *c, *t; | 365 COMMAND *c, *t; |
390 | 390 |
391 /*-------------------------------------------------------------------/ | 391 /*-------------------------------------------------------------------/ |
392 int | 392 int |
393 psx_queue (unsigned int id, unsigned int size, unsigned char *data, | 393 psx_queue (unsigned int id, unsigned int size, unsigned char *data, |
394 char mode, void(*callback)(char*,void*), void * obj): | 394 char mode, void(*callback)(char*,void*), void * obj): |
395 out,in,read,waitなどのコマンドをCOMMANDキューに溜める。データを | 395 out,in,read,wait潟潟COMMANDャ若羣若帥 |
396 受信するコマンド(in,read,wait)のときは受け取ったときにデータを | 396 篆<潟潟(in,read,wait)c若帥 |
397 格納するREPLY構造体を作る。 | 397 主REPLY罕篏篏 |
398 | 398 |
399 引き数: | 399 綣: |
400 id - アクセスするTUPLE SpaceのID | 400 id - ≪祉鴻TUPLE SpaceID |
401 size - dataのサイズ | 401 size - data泣ゃ |
402 data - 送信するデータ。受信時はNULL。 | 402 data - 篆<若帥篆≧NULL |
403 mode - コマンドのモード(out,in,read,wait は各々char型: o,i,r,w) | 403 mode - 潟潟≪若(out,in,read,wait char: o,i,r,w) |
404 callback - コールバックを使用する場合の関数へのポインタ。 | 404 callback - 潟若篏睡翫∽違吾ゃ潟帥 |
405 使用しない場合はNULL。 | 405 篏睡翫NULL |
406 obj - コールバックで用いる関数に引き渡すデータ。 | 406 obj - 潟若х∽違綣羝<若帥 |
407 返り値: | 407 菴: |
408 成功した場合 - mallocしたREPLY構造体へのポインタ。outの場合は | 408 翫 - mallocREPLY罕篏吾ゃ潟帥out翫 |
409 0が返る。 | 409 0菴 |
410 失敗した場合 - FAIL(-1)が返る。 | 410 紊掩翫 - FAIL(-1)菴 |
411 /-------------------------------------------------------------------*/ | 411 /-------------------------------------------------------------------*/ |
412 int | 412 int |
413 psx_queue(unsigned int id, unsigned int size, unsigned char *data, char mode, | 413 psx_queue(unsigned int id, unsigned int size, unsigned char *data, char mode, |
414 void(*callback)(char *,void *), void * obj){ | 414 void(*callback)(char *,void *), void * obj){ |
415 REPLY *p; | 415 REPLY *p; |
438 } | 438 } |
439 c = q_end; | 439 c = q_end; |
440 q_end = q_end->next; | 440 q_end = q_end->next; |
441 } | 441 } |
442 | 442 |
443 // size は DATASIZE | 443 // size DATASIZE |
444 if ((q_end->command = (unsigned char *) malloc(size+LINDA_HEADER_SIZE)) == NULL){ | 444 if ((q_end->command = (unsigned char *) malloc(size+LINDA_HEADER_SIZE)) == NULL){ |
445 free(q_end); | 445 free(q_end); |
446 c->next = NULL; | 446 c->next = NULL; |
447 return(FAIL); | 447 return(FAIL); |
448 } | 448 } |
458 return(FAIL); | 458 return(FAIL); |
459 } | 459 } |
460 p = r_end->next; r_end = p; p->next = NULL; | 460 p = r_end->next; r_end = p; p->next = NULL; |
461 } | 461 } |
462 p->mode = '?'; | 462 p->mode = '?'; |
463 p->seq = (int)p; // 構造体のアドレスで識別 | 463 p->seq = (int)p; // 罕篏≪鴻ц |
464 p->callback = callback; | 464 p->callback = callback; |
465 p->obj = obj; | 465 p->obj = obj; |
466 PSX_Debug(("psx_queue: seq %d reply %x p %x r_end %x",seq,reply,p,r_end)); | 466 PSX_Debug(("psx_queue: seq %d reply %x p %x r_end %x",seq,reply,p,r_end)); |
467 }else{ | 467 }else{ |
468 p=0; | 468 p=0; |
489 } | 489 } |
490 | 490 |
491 /*-------------------------------------------------------------------/ | 491 /*-------------------------------------------------------------------/ |
492 void | 492 void |
493 unix_chkserv (): | 493 unix_chkserv (): |
494 サーバからデータ(TUPLE)を受け取る。REPLY構造体にコールバック関数 | 494 泣若若(TUPLE)REPLY罕篏潟若∽ |
495 が指定されていればその関数を実行し、REPLY構造体をキューから取り | 495 絎違∽違絎茵REPLY罕篏ャ若 |
496 除く。コールバック関数が指定されていなければREPLY構造体にデータ | 496 ゃ潟若∽違絎REPLY罕篏若 |
497 を引き渡す。 | 497 綣羝< |
498 /-------------------------------------------------------------------*/ | 498 /-------------------------------------------------------------------*/ |
499 void | 499 void |
500 unix_chkserv(){ | 500 unix_chkserv(){ |
501 int i,k,pkt,npkt; | 501 int i,k,pkt,npkt; |
502 REPLY *r,*prev; | 502 REPLY *r,*prev; |
577 } | 577 } |
578 | 578 |
579 /*-------------------------------------------------------------------/ | 579 /*-------------------------------------------------------------------/ |
580 int | 580 int |
581 get_int(unsigned char * tuple, int offset): | 581 get_int(unsigned char * tuple, int offset): |
582 TUPLEのヘッダに格納された int型 のデータを得るための関数 | 582 TUPLE主 int 若帥緇∽ |
583 psx_get_datalength() と psx_get_seq() から呼ばれる。 | 583 psx_get_datalength() psx_get_seq() 若違 |
584 | 584 |
585 引き数: | 585 綣: |
586 tuple - ヘッダ情報も含んだTUPLE。psx_reply()で得たものでもいい。 | 586 tuple - 宴TUPLEpsx_reply()ус |
587 offset - 取りだすデータのオフセット。LINDA_DATA_LENGTH_OFFSET | 587 offset - 若帥祉LINDA_DATA_LENGTH_OFFSET |
588 か LINDA_SEQ_OFFSET。 | 588 LINDA_SEQ_OFFSET |
589 | 589 |
590 返り値: | 590 菴: |
591 指定したオフセットに格納されていた数値(int型) | 591 絎祉主医(int) |
592 /-------------------------------------------------------------------*/ | 592 /-------------------------------------------------------------------*/ |
593 static | 593 static |
594 int get_int(unsigned char * tuple, int offset){ | 594 int get_int(unsigned char * tuple, int offset){ |
595 int i; | 595 int i; |
596 i = (tuple[offset] <<24) + | 596 i = (tuple[offset] <<24) + |