当前位置: 首页 > news >正文

Option parsing

为什么80%的码农都做不了架构师?>>>   hot3.png



介绍
FUSE提供了一些方法来简化选项处理。您可分析的参数和手动告诉他们FUSE,或者你可能会问FUSE为您解析命令行。
不管你是否选择下列方法之一或两者兼而有之,你有初始化结构fuse_args,存储参数:
参数 输入/输出 描述
诠释ARGC 输入 参数计数
的char * argv的 输入 '\ 0'结束的字符串数组的参数
初始化例子:
/ /初始化一个空的参数列表
结构fuse_args的ARG游戏= FUSE_ARGS_INIT(0,NULL);
/ /初始化参数的值列表
/ /在命令行收到的主
结构fuse_args的ARG游戏= FUSE_ARGS_INIT(ARGC ARGV);


fuse_opt_add_arg


此功能可让您手动添加参数的结构fuse_args列表。
参数 输入/输出 描述
fuse_args *参数 产量 将存储新的参数列表,其中的fuse_args
的char * argv的 输入 的参数添加的fuse_args列表中
在下面的例子中,我们假设一个命令行语法,其中第二个参数是具体的一些文件系统的实现。所有其它参数是FUSE本地的参数。


 INT主(argc,焦炭*的argv [])
{
     结构fuse_args的ARG游戏= FUSE_ARGS_INIT(0,NULL);
     ;
     
     (i = 0;我ARGC,我+ +){
             如果(在i == 2)
                     MyParameter的ARGV [我];
             其他
                     fuse_opt_add_arg(&参数的argv []);
     }
     
     返回fuse_main(args.argc,args.argv,my_operations,NULL);
}

fuse_opt_parse


此功能可让您手动添加参数的结构fuse_args列表。
参数 输入/输出 描述
fuse_args *参数 输入 fuse_args列表中的参数存储
结构myfs_config *配置 产量 我的文件系统的特定参数将被存储的参数列表
fuse_opt * myfs_opts 输入 我的文件系统所接受的选项列表
(* myfs_opt_proc)(无效数据,为const char * arg的,int键,结构fuse_args outargs) 输入 一个回调函数的指针将被调用来处理每一个参数,在命令行中发现fuse_opt_parse


在下面的例子中,我们假设一个命令行语法,其中的一些文件系统实现的具体参数混合与本机的保险丝参数。
例子:
“静态的诠释myfs_opt_proc(void *的数据,为const char * arg的,int键,结构fuse_args * outargs)
{
     如果满足(key == FUSE_OPT_KEY_NONOPT的&& MyParameter的== NULL){
             MyParameter的= strdup(阿根廷);
             返回0;
     }
     返回1;
}


INT主(argc,焦炭*的argv [])
{
     结构fuse_args的ARG游戏= FUSE_ARGS_INIT(ARGC ARGV);


     fuse_opt_parse(&参数,NULL,NULL,myfs_opt_proc);


     返回fuse_main(args.argc,args.argv,my_operations,NULL);
}


/ /添加新的参数之前调用fuse_main():
INT主(argc,焦炭*的argv [])
{
     结构fuse_args的ARG游戏= FUSE_ARGS_INIT(ARGC ARGV);


     fuse_opt_parse(&参数,NULL,NULL,NULL);
     fuse_opt_add_arg(参数“-O模块子目录,子目录/富”);


     返回fuse_main(args.argc,args.argv,my_operations,NULL);
}
/ /一个更复杂的例子:
结构myfs_config {
     myNum的初始值;
     字符* MyString的;
     诠释mybool;
};


枚举{
     KEY_HELP,
     KEY_VERSION,
};


#定义MYFS_OPT(T,P,V){T,offsetof的(myfs_config,P),V}


静态结构fuse_opt myfs_opts [] = {
     MYFS_OPT(“将myNum =%I”中,myNum 0)
     MYFS_OPT(“-N%I”中,myNum,0),
     MYFS_OPT(“myString的=%”,myString中,0),
     MYFS_OPT(“mybool”,mybool,1),
     MYFS_OPT(“nomybool”,mybool,0),
     MYFS_OPT(“ -  mybool = true”的,mybool,1),
     MYFS_OPT(“ -  mybool =假”,mybool 0),


     FUSE_OPT_KEY(“-V”,KEY_VERSION),
     FUSE_OPT_KEY(“ - 版”,KEY_VERSION)
     FUSE_OPT_KEY(“小时”,KEY_HELP),
     FUSE_OPT_KEY(“ - 帮助”,KEY_HELP)
     FUSE_OPT_END
};


“静态的诠释myfs_opt_proc(void *的数据,为const char * arg的,int键,结构fuse_args * outargs)
{
     开关(钥匙){
     情况下KEY_HELP:
             与fprintf(stderr中,
                     “用法:%s的挂载点[选项] \ n”
                     “\ n”
                     “一般选项:\ n”
                     “-O选项,[选择...]安装选项\ n”
                     “-h  -  help打印帮助\ n”
                     “-V  -  version显示版本\ n”
                     “\ n”
                     “Myfs选项:\ n”
                     “-O将myNum = NUM \ n”
                     “-O myString的= STRING \ n”
                     “-O mybool \ n”
                     “-O nomybool \ n”
                     “-N NUM一样omynum = NUM'\ n”
                     “ -  mybool BOOL相同'mybool”或“nomybool”\ n“
                     “,outargs>的argv [0]);
             fuse_opt_add_arg(outargs,“何先生”);
             fuse_main(outargs  - > ARGC,outargs  - > ARGV,与my_operations,NULL);
             出口(1);


     案例KEY_VERSION:
             与fprintf(stderr中,“Myfs版本是%s \ n”,PACKAGE_VERSION);
             fuse_opt_add_arg(outargs,“ - 版”);
             fuse_main(outargs  - > ARGC,outargs  - > ARGV,与my_operations,NULL);
             出口(0);
     }
     返回1;
}


INT主(argc,焦炭*的argv [])
{
     结构fuse_args的ARG游戏= FUSE_ARGS_INIT(ARGC ARGV);
     myfs_config配置;


     memset的(CONF,0,大小(配置));


     fuse_opt_parse(参数,和CONF,myfs_opts,myfs_opt_proc);


     返回fuse_main(args.argc,args.argv,my_operations,NULL);


转载于:https://my.oschina.net/gddyl/blog/110439

相关文章:

  • 解决iframe显示高度自适应问题
  • (1)Android开发优化---------UI优化
  • 支付宝信用卡真的来了:覆盖8000万用户
  • SVN同步版本库与网站目录
  • 数据治理衡量和监测流程:了解数据及其价值
  • .NET开发人员必知的八个网站
  • Python:使用threading模块实现多线程编程七[使用Condition实现复杂同步]
  • shell-for循环
  • CXF 做 webservice 简单例子demo
  • java多线程学习总结之三:线程间的协作
  • JB4.2:添加一个SwithButton控制ShutterSound
  • Linux下取本机所有网口的ip地址
  • android 蓝牙源码分析
  • 新版本的GNS3(0.8.2)模拟ASA的教程
  • LVM的综合性介绍及实现
  • HTTP 简介
  • IOS评论框不贴底(ios12新bug)
  • java8 Stream Pipelines 浅析
  • js学习笔记
  • Python打包系统简单入门
  • SpiderData 2019年2月23日 DApp数据排行榜
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • VUE es6技巧写法(持续更新中~~~)
  • Vue官网教程学习过程中值得记录的一些事情
  • vue中实现单选
  • 多线程事务回滚
  • 老板让我十分钟上手nx-admin
  • 理解在java “”i=i++;”所发生的事情
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 我感觉这是史上最牛的防sql注入方法类
  • 硬币翻转问题,区间操作
  • 优秀架构师必须掌握的架构思维
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • #if 1...#endif
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (区间dp) (经典例题) 石子合并
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)Controller接口控制器详解(三)
  • (转)Oracle存储过程编写经验和优化措施
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃