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

首頁 > 學院 > 開發設計 > 正文

grub2中env綁定hook函數

2019-11-09 17:24:46
字體:
來源:轉載
供稿:網友
在調用grub_env_get 獲取環境變量的時候,可以對這個環境變量綁定一個處理函數。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 找到這個env的話,會判斷是否綁定read_hook 函數,如果綁定就返回read_hook。這個感覺和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]);    }}這個例子會對注冊在grub_datetime_names 中的每一個字符串綁定一個grub_read_hook_datetime 函數,這樣當調用grub_get_env("YEAR")的時候就會調用grub_read_hook_datetime函數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的實現也很簡單,就是返回具體對應的時間.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 找到這個env,如果沒有找到則不綁定,也就是說在調用grub_register_variable_hook 之前必須調用grub_env_set 函數先設定環境變量.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐亭县| 襄城县| 安徽省| 普宁市| 柞水县| 抚州市| 双峰县| 上蔡县| 楚雄市| 西乌珠穆沁旗| 华阴市| 阿巴嘎旗| 和顺县| 沧州市| 哈尔滨市| 巢湖市| 梅河口市| 蛟河市| 万全县| 武汉市| 建始县| 资源县| 临泽县| 潜江市| 巢湖市| 治县。| 博白县| 大关县| 宜章县| 紫阳县| 忻城县| 南靖县| 公安县| 农安县| 宕昌县| 台前县| 迭部县| 同德县| 吴桥县| 辽宁省| 合江县|