pvfs中src/client/sysin/sys-get-eattr.sm与对应的src/client/sysin/sys-get-eattr.c
发布日期:2021-07-13 02:57:14 浏览次数:2 分类:技术文章

本文共 2360 字,大约阅读时间需要 7 分钟。

.sm文件的装态机描述部分:

machine pvfs2_client_get_eattr_sm {      state setup_msgpair       {          run get_eattr_setup_msgpair;          success => xfer_msgpair;          default => cleanup;      }        state xfer_msgpair      {          jump pvfs2_msgpairarray_sm;          default => cleanup;      }        state cleanup      {          run get_eattr_cleanup;          default => terminate;      } }

其中有三个状态set_msgpair  xfer_msgpair  cleanup

对应生成的.c文件的部分为:

struct PINT_state_machine_s pvfs2_client_get_eattr_sm = {          .name = "pvfs2_client_get_eattr_sm",            //对应状态机的名字          .first_state = &ST_setup_msgpair                //对应状态机的第一个状态  };   static struct PINT_state_s ST_setup_msgpair = {         //第一个状态           .state_name = "setup_msgpair" ,                //状态名称           .parent_machine = &pvfs2_client_get_eattr_sm , //父状态机           .flag = SM_RUN ,                               //标志对应.sm文件中第一个状态的run动作           .action.func = get_eattr_setup_msgpair ,       //状态动作函数           .pjtbl = NULL ,                                 .trtbl = ST_setup_msgpair_trtbl                //状态转移表  };   static struct PINT_tran_tbl_s ST_setup_msgpair_trtbl[] = { //状态转移表          { .return_value = 0 ,                           //success(0),进入下一个状态xfer_msgpair           .next_state = &ST_xfer_msgpair },          { .return_value = -1 ,                          //default(-1),进入cleanup           .next_state = &ST_cleanup }  };   static struct PINT_state_s ST_xfer_msgpair = {          //与第一个状态类似           .state_name = "xfer_msgpair" ,           .parent_machine = &pvfs2_client_get_eattr_sm ,           .flag = SM_JUMP ,                              //标志对应状态的动作为jump           .action.nested = &pvfs2_msgpairarray_sm ,      //.nested表明跳到一个其他的状态机文件           .pjtbl = NULL ,           .trtbl = ST_xfer_msgpair_trtbl  };  static struct PINT_tran_tbl_s ST_xfer_msgpair_trtbl[] = {          { .return_value = -1 ,           .next_state = &ST_cleanup }  };static struct PINT_state_s ST_cleanup = {           .state_name = "cleanup" ,           .parent_machine = &pvfs2_client_get_eattr_sm ,           .flag = SM_RUN ,           .action.func = get_eattr_cleanup ,           .pjtbl = NULL ,           .trtbl = ST_cleanup_trtbl  };   static struct PINT_tran_tbl_s ST_cleanup_trtbl[] = {  //终止          { .return_value = -1 ,           .flag = SM_TERM }  };

转载地址:https://blog.csdn.net/buaa_shang/article/details/8162191 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:vim+cscope+ctags+Tlist使用
下一篇:assert()函数的使用方法

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月19日 12时07分29秒