首页  登陆  注册  博客集  下载频道  网络硬盘  学院论坛  家园
IT学院 网站地图 网站地图
收藏本站 收藏本站
高级搜索 高级搜索
 新闻IT新闻 互联网 微软 黑客新闻 网络网络协议 故障 网络管理 TCP/IP 无线技术 解决方案 黑客技术 漏洞 软件评测 安全资讯
 数据MSsql Oracle Mysql PL/SQL 备份 系统:Linux vista Windows FTP 防火墙 注册表 服务器行情 服务器应用 解决方案 WEB服务器
 墙纸风景壁纸 游戏壁纸 体育壁纸 汽车壁纸 人文壁纸 影视壁纸 广告壁纸 花卉壁纸 节日壁纸 动漫壁纸 明星壁纸 绘画壁纸 月历壁纸
当前位置: > 主页>Linux>新手入门>常用命令>LInux程序的命令行处理
热门文章排行
 
热门文章排行 基础教程-学用Linux命令
基础教程-学用Linux命令
基础教程-学用Linux命令
开发 Linux 命令行实用
TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第
精采文章推荐
 
精采文章推荐 TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第
开发 Linux 命令行实用
基础教程-学用Linux命令
最新更新文章
 
最新更新文章 Linux环境下运行DOS命令
扫盲行动之:Linux常用
FTP命令大全及其应用
Linux的常用网络命令
LInux程序的命令行处理
Linux_FAQ之三:系统命令
Linux命令使用技巧集锦
TurboLinux 入门教程:第
TurboLinux 入门教程:第
TurboLinux 入门教程:第

LInux程序的命令行处理

编辑:   来源:  日期:2008-03-06   我要投稿      家园

 几乎所有的GNU/Linux程序都遵循一些同样的命令行解释习惯,程序的参数通常分为了两大类:选项(option)或者一些标志(flag)、其他参数。选项(option)主要是提供给程序一些运行上的选择,而其他参数则通常是提供给程序运行的输入之类的值。按照习惯,选项通常有两种表达形式:
  
    ¨ 短形式:通常是由一个“-”加上一个字母组合而成。这种形式的好处是输入快捷。
  
    ¨ 长形式:通常是由两个“-”加上一个单词组合而成。这种形式的好处是形象、好记、直观。
  
    通常来说,一个程序读于这两种形式都支持。例如大多数的程序都有这样的调用选项:“-h”和“――help”。一些选项需要知道后面跟着的参数,例如“ls –s /”,这里其中的“/”就是一个参数。
  
    使用getopt_long函数来处理
  
    对于一个命令行的分析处理是很单调乏味的工作,需要做大量的诸如字符串的匹配之类的操作,不过幸运的是,GNU C函数库 里面提供了一个函数能够使得这项工作变得容易得多。当然也许仍然没有你想象的那么容易。:))getopt_long这个函数就能够同时“理解”长形式和短形式的参数,需要包括的头文件是
  
    下面我们通过一个实例来学习这个函数的使用。
  
    假设我们要编写的一个程序需要处理以下几个参数:
  
    短形式 长形式 含义
  
    -h ――help 打印帮助信息
  
    -s ――server 服务器IP地址
  
    -b ――background 后台执行
  
    要使用getopt_long()这个函数,我们需要提供两个数据结构,第一个是一个字符串,该字符串中的每个字符来表示短形式的选项,如果某个选项后面需要跟一个参数,那么就需要在这个字符后面加上一个“:”(冒号),例如“hs:b”就是我们这个例子中的结构。为了定义长形式表达的选项,我们需要定一个结构体数组。数组的每一项与一个长形式的参数相关,每项包括四个参数:通常来说,第一项是长形式的选项的字符串表达;第二项与后面是否有参数提取有关,如果后面有参数需要处理就是1,否则是0;第三项是NULL;最后一项则是与长形式相关联的短形式表达的字符。另外,这个数组的最后一项必须全部置为0。
  
    根据上面的说明,对于我们的例子,可以得到下面的一个数组:
  
  
  const struct option long_options [] =={
  {“help ”,0,NULL,‘h ’ }},
  {“server ”,1,NULL,‘s ’ }},
  {“background”,0,NULL,‘b ’ }},
  {NULL,0,NULL,0 }
  };
  
  
  
    我们把传给main函数的参数给getopt_long,他就一项一项的读取处理,返回短形式表达的选项的字符,如果没有找到选项则返回-1。通常我们都是在一个循环里面反复调用getopt_long,然后通过一个switch语句来处理不同的选项。如果getopt_long遇到一个没有定义的选项,则会返回一个“?”(问号)字符。下面是我们的例子,这是一个很典型的处理过程:
  
  
  #include
  #include
  #include
  const char*program_name;
  void print_usage (FILE*stream,int exit_code)
  {
  fprintf (stream,“Usage:%s options [ inputfile ....]
  ”,program_name);
  fprintf (stream,
  “ -h --help Display this usage information.
  ”
  “ -s --server ip Set the server IP.
  ”
  “ -b --background run in the backgound.
  ”);
  exit (exit_code);
  }
  int main (int argc,char*argv [])
  {
  int next_option;
  const char*const short_options =“hs:b ”;
  const struct option long_options [] =={
  {“help ”,0,NULL,‘h ’ }},
  {“server”,1,NULL,‘s ’ }},
  {“background ”,0,NULL,‘b ’ }},
  {NULL,0,NULL,0 }
  };
  const char*output_filename =NULL;
  int verbose =0;
  program_name =argv [0 ];
  do {
  next_option =getopt_long (argc,argv,short_options,
  long_options,NULL);
  switch (next_option)
  {
  case ‘h ’:/*-h or --help */
  print_usage (stdout,0);
  case ‘s ’:/*-o or --output */
  //ip =optarg;
  break;
  case ‘b ’:/*-v or --verbose */
  break;
  case ‘?’:/*The user specified an invalid option.*/
  code one (indicating abnormal termination).*/
  print_usage (stderr,1);
  case -1:/*Done with options.*/
  break;
  default:/*Something else:unexpected.*/
  abort ();
  }
  }
  while (next_option !=-1);
  /*The main program goes here.*/
  return 0;
  }


上一篇:Linux_FAQ之三:系统命令  
下一篇:Linux的常用网络命令
 关键字:  
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论
 

  责任编辑:IT学院  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。