Binder系統 C程式示例 編寫程式

2021-08-28 04:01:54 字數 3024 閱讀 8568

一、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指開啟某檔...