chapter 05-01

外部程式和內部模組的資料傳遞

外部程式在使用 mcm_lulib_run / mcm_lklib_run 執行內部模組時, 可以傳遞資料給內部模組, 而內部模組也可以回傳資料給外部程式.


變數格式的說明

[struct mcm_service_session_t *this_session]
請求端的連線資訊. [詳細]
會使用到的結構成員 :
void *
req_data_con
外部程式傳來的資料 [來源-User] [來源-Kernel]
NULL 表示外部程式沒有傳送資料給模組函式
MCM_DTYPE_USIZE_TD
req_data_len
外部程式傳來的資料的長度 [來源-User] [來源-Kernel]
如果 req_data_con 是 NULL 則為 0
void *
rep_data_buf
紀錄內部模組要回傳的資料 [目的-User] [目的-Kernel]
預設值是 NULL, 表示內部模組沒有要回傳資料
要回傳資料的話必須動態配置一塊記憶體, 並將得到的位址給 rep_data_buf, 後續程式會自動釋放配置的記憶體
MCM_DTYPE_USIZE_TD
rep_data_len
紀錄內部模組要回傳的資料的長度 [目的-User] [目的-Kernel]
預設值是 0, 表示內部模組沒有要回傳資料, rep_data_len 的值可以小於 rep_data_buf 配置的記憶體大小, 實際回傳的資料長度以 rep_data_len 為準

範例 :
int mcm_module_data_test(
    struct mcm_service_session_t *this_session)
{
    MCM_DTYPE_USIZE_TD tmp_len;
    char *tmp_buf;

    // 外部程式傳來的資料.
    printf("req [" MCM_DTYPE_USIZE_PF "][%p]",
           this_session->req_data_len, this_session->req_data_con);

    // 內部模組要回傳的資料.

    tmp_len = 128;
    tmp_buf = (char *) malloc(tmp_len);

    snprintf(tmp_buf, tmp_len, "internal data");

    this_session->rep_data_buf = tmp_buf;
    this_session->rep_data_len = strlen(tmp_buf) + 1;

    return MCM_RCODE_PASS;
}