處理函式要放在
mint_cm/mcm_daemon/mcm_module 內, 新增一個 C 檔案, 內容為 :
#include "mcm_lib/mcm_lheader/mcm_type.h"
#include "mcm_lib/mcm_lheader/mcm_return.h"
#include "mcm_lib/mcm_lheader/mcm_debug.h"
#include "../mcm_action_handle_define.h"
struct mcm_action_module_t MCM_ACTION_CUSTOM_MODULE_BOOT_PROFILE_LIST_NAME[] =
{
{""}
};
struct mcm_action_module_t MCM_ACTION_CUSTOM_MODULE_BOOT_OTHER_LIST_NAME[] =
{
{""}
};
int MCM_ACTION_CUSTOM_RESET_DEFAULT_NAME(
void)
{
return MCM_RCODE_PASS;
}
此章節只需要用到
MCM_ACTION_CUSTOM_RESET_DEFAULT_NAME{}
在函式內處理執行外部批次檔或程式的動作.
範例 :
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include "mcm_lib/mcm_lheader/mcm_type.h"
#include "mcm_lib/mcm_lheader/mcm_return.h"
#include "mcm_lib/mcm_lheader/mcm_debug.h"
#include "../mcm_action_handle_define.h"
struct mcm_action_module_t MCM_ACTION_CUSTOM_MODULE_BOOT_PROFILE_LIST_NAME[] =
{
{""}
};
struct mcm_action_module_t MCM_ACTION_CUSTOM_MODULE_BOOT_OTHER_LIST_NAME[] =
{
{""}
};
int MCM_ACTION_CUSTOM_RESET_DEFAULT_NAME(
void)
{
int fret = MCM_RCODE_MODULE_INTERNAL_ERROR;
char *script_path = "reset_default.sh", cmd_buf[32];
FILE *file_fp;
// 建立外部 shell script, 使用外部 shell script 處理.
if((file_fp = fopen(script_path, "w")) == NULL)
{
MCM_EMSG("call fopen(%s) fail [%s]", script_path, strerror(errno));
goto FREE_01;
}
fprintf(file_fp, "#!/bin/sh\n");
// 等待一段時間, 等目前的程式關閉.
fprintf(file_fp, "sleep 3\n");
// 重新執行.
fprintf(file_fp,
"./mcm_daemon "
"-t 0 "
"-a @mintcm "
"-l ./mcm_module.lib "
"-m mcm_model_profile.txt "
"-d mcm_store_profile_default.txt "
"-c mcm_store_profile_current.txt "
"-s 0 "
"-e 1 "
"-p /var/run/mcm_daemon.pid &\n");
fprintf(file_fp, "rm -f $0\n");
fclose(file_fp);
chmod(script_path, 0777);
// 執行 shell script.
snprintf(cmd_buf, sizeof(cmd_buf), "./%s &", script_path);
if(system(cmd_buf) == -1)
{
MCM_EMSG("call system(%s) fail", cmd_buf);
goto FREE_01;
}
fret = MCM_RCODE_PASS;
FREE_01:
return fret;
}
執行完 MCM_ACTION_CUSTOM_RESET_DEFAULT_NAME{} 後, mcm_daemon 會結束執行.