一、server.c檔案的編寫
開啟驅動
bs = binder_open(128*1024);
if (!bs)
註冊服務
/* add service */
/* 註冊服務 svcmgr是0表示向服務管理發訊息,最後乙個是指標*/
ret = svcmgr_publish(bs, svcmgr, "hello", (void *)123);
if (ret)
/* 註冊服務 svcmgr是0表示向服務管理發訊息,最後乙個是指標*/
ret = svcmgr_publish(bs, svcmgr, "goodbye", (void *)124);
if (ret)
乙個迴圈實現
binder_loop(bs, hello_service_handler);
void binder_loop(struct binder_state *bs, binder_handler func)
/*解析資料*/
res = binder_parse(bs, 0, (uintptr_t) readbuf, bwr.read_consumed, func);
if (res == 0)
if (res < 0) }}
解析資料
int binder_parse(struct binder_state *bs, struct binder_io *bio,
uintptr_t ptr, size_t size, binder_handler func)
binder_dump_txn(txn);
if (func)
ptr += sizeof(*txn);
break;
}case br_reply:
binder_dump_txn(txn);
if (bio) else
ptr += sizeof(*txn);
r = 0;
break;
}case br_dead_binder:
case br_failed_reply:
r = -1;
break;
case br_dead_reply:
r = -1;
break;
default:
aloge("parse: oops %d\n", cmd);
return -1;}}
return r;
}
完成hello_service_handler函式
/* 根據txn->code知道要呼叫哪乙個函式
* 如果需要引數, 可以從msg取出
* 如果要返回結果, 可以把結果放入reply
*//* 提供兩個函式,根據txn->code知道要呼叫哪乙個函式
* sayhello
* sayhello_to*/
/*從msg裡取出字串 bio_get_string16是16位的,
*我們需要轉換為8位的*/
/* 處理返回值 */
/* 把返回值結果放入reply */
int hello_service_handler(struct binder_state *bs,
struct binder_transaction_data *txn,
struct binder_io *msg,
struct binder_io *reply)
for (i = 0; i < len; i++)
name[i] = s[i];
name[i] = '\0';
/* 處理返回值 */
i = sayhello_to(name);
/* 把返回值結果放入reply */
bio_put_uint32(reply, i);
break;
default:
fprintf(stderr, "unknown code %d\n", txn->code);
return -1;
}return 0;
}
實現sayhello
void sayhello(void)
實現sayhello_to
int sayhello_to(char *name)
二、client.c檔案的編寫
開啟驅動
bs = binder_open(128*1024);
if (!bs)
獲得服務
handle = svcmgr_lookup(bs, svcmgr, "hello");
if (!handle)
uint32_t svcmgr_lookup(struct binder_state *bs, uint32_t target, const char *name)
呼叫函式
/* send data to server */
if (argc == 2) else if (argc == 3)
編寫sayhello函式
void sayhello(void)
編寫sayhello_to函式
int sayhello_to(char *name)
C51編寫選單的示例程式
include include define size of keybd menu 20 選單長度 uchar keyfuncindex 0 uchar keyfuncindexnew 0 void keyfuncptr 按鍵功能指標 typedef struct kbdtabstruct kbdt...
C 程式示例
例1.用篩法判定素數 include include include using namespace std int main ifstream in sushu.txt for int a in a a 2 a 10000 cout 例2.若干個向量按長短排序 include include in...
如何用linux系統編寫c程式
目錄 toc 本部落格在我學習linux過程將持續更新 1 1 按下快捷鍵開啟終端 ctrl alt t 2 從左側工具欄中開啟終端。1.cd cd指返回當前目錄 如cd desktop program 便是指返回到desktop 桌面 的program 資料夾 2.gedit gedit指開啟某檔...