国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

grub2中env綁定hook函數(shù)

2019-11-09 16:20:04
字體:
供稿:網(wǎng)友
在調(diào)用grub_env_get 獲取環(huán)境變量的時(shí)候,可以對(duì)這個(gè)環(huán)境變量綁定一個(gè)處理函數(shù)。grub_env_get (const char *name){  struct grub_env_var *var;  var = grub_env_find (name);  if (! var)    return 0;  if (var->read_hook)    return var->read_hook (var, var->value);  return var->value;}例如grub_env_get 中如果通過grub_env_find 找到這個(gè)env的話,會(huì)判斷是否綁定read_hook 函數(shù),如果綁定就返回read_hook。這個(gè)感覺和grub_register_command 有一曲通過的效果。static const char *grub_datetime_names[] ={  "YEAR",  "MONTH",  "DAY",  "HOUR",  "MINUTE",  "SECOND",  "WEEKDAY",};GRUB_MOD_INIT(datehook){  unsigned i;  for (i = 0; i < ARRAY_SIZE (grub_datetime_names); i++)    {      grub_register_variable_hook (grub_datetime_names[i],                   grub_read_hook_datetime, 0);      grub_env_export (grub_datetime_names[i]);    }}這個(gè)例子會(huì)對(duì)注冊(cè)在grub_datetime_names 中的每一個(gè)字符串綁定一個(gè)grub_read_hook_datetime 函數(shù),這樣當(dāng)調(diào)用grub_get_env("YEAR")的時(shí)候就會(huì)調(diào)用grub_read_hook_datetime函數(shù)grub_read_hook_datetime (struct grub_env_var *var,                         const char *val __attribute__ ((unused))){  struct grub_datetime datetime;  static char buf[6];  buf[0] = 0;  if (! grub_get_datetime (&datetime))    {      int i;      for (i = 0; i < 7; i++)        if (grub_strcmp (var->name, grub_datetime_names[i]) == 0)          {            int n;            switch (i)              {              case 0:                n = datetime.year;                break;    }  return buf;}grub_read_hook_datetime的實(shí)現(xiàn)也很簡(jiǎn)單,就是返回具體對(duì)應(yīng)的時(shí)間.grub_register_variable_hook (const char *name,                 grub_env_read_hook_t read_hook,                 grub_env_write_hook_t write_hook){  struct grub_env_var *var = grub_env_find (name);  if (! var)    {      if (grub_env_set (name, "") != GRUB_ERR_NONE)    return grub_errno;      var = grub_env_find (name);      /* XXX Insert an assertion?  */    }  var->read_hook = read_hook;  var->write_hook = write_hook;  return GRUB_ERR_NONE;}而grub_register_variable_hook 則首先通過grub_env_find 找到這個(gè)env,如果沒有找到則不綁定,也就是說在調(diào)用grub_register_variable_hook 之前必須調(diào)用grub_env_set 函數(shù)先設(shè)定環(huán)境變量.
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 得荣县| 四会市| 固阳县| 江孜县| 合阳县| 通河县| 九江县| 南郑县| 乌苏市| 右玉县| 大连市| 甘德县| 蚌埠市| 上栗县| 天长市| 金沙县| 上栗县| 巴塘县| 博野县| 洛隆县| 宁都县| 陵川县| 上栗县| 阳西县| 新乐市| 邹城市| 容城县| 顺义区| 横峰县| 遂平县| 乃东县| 筠连县| 巴南区| 武鸣县| 沅江市| 利津县| 柘城县| 科技| 长泰县| 墨玉县| 双城市|