Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14408
  • 博文数量: 5
  • 博客积分: 130
  • 博客等级: 入伍新兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-07 21:52
文章分类
文章存档

2011年(1)

2010年(2)

2009年(2)

我的朋友
最近访客

分类: LINUX

2009-05-18 18:49:59

今天在写一个用文件名作为关键字的处理文件函数。之前一直不知道该怎么写,用其他的方法又嫌太麻烦,之后用Google搜了下,发现了《用enum类型数据解决switch case 选择字符串的问题》这篇文章,文章源地址是:http://qq164587043.blog.51cto.com/261469/67306,作者信息:,其版权声明:版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://qq164587043.blog.51cto.com/261469/67306.觉得文章挺不错的,链接了过来,通过借鉴之后自己的程序也出来了,在此向文章主聊表感谢~~~~。

自己程序的运行环境:Ubuntu 8.04
运行命令:
ly@ly-desktop:~/linux$ sudo ./enumfile /sys/block/sda
运行结果:
ly@ly-desktop:~/linux$ sudo ./enumfile /sys/block/sda
参数传递错误!
参数传递错误!
参数传递错误!
dev  该数据表示:冒号前的数据是“主设备号”,冒号后的数据“次设备号”。
range  该数据表示:对磁盘操作的操作队列。
removable  该数据表示“可移动的磁盘数”。
size  该数据表示“该分区大小”。
参数传递错误!
capability  该数据表示“能力”。
参数传递错误!
参数传递错误!
参数传递错误!
参数传递错误!
参数传递错误!
参数传递错误!
参数传递错误!
参数传递错误!

还在初级学习阶段,小菜鸟一只,嘿嘿~~,不足之处非常欢迎大家多多指教!先在此谢谢~~。

源程序:

/*filename:enumfile*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <unistd.h>
#include <string.h>

enum filename {capability,removable,size,dev,range};
const char *filenames[]={"capability","removable","size","dev","range"};

void usage(char *sourcename)
{
  printf("Source name:%s\n",sourcename);
  exit(1);
}

main(int argc,char * *argv)
{
  char sourcefile[256];
  DIR *dirp;
  struct dirent *direntp;

  FILE *fp;
  enum filename i;

  if(argc!=2)
  {
    printf("运行命令中缺少要打开的目录名!\n");
    exit(1);
  }
  if((dirp=opendir(argv[1]))==NULL)
  {
    printf("Could not open directory:%s\n",argv[1]);
    exit(1);
  }
  while((direntp=readdir(dirp))!=NULL)
  {
    for(i=capability;i<=range;i++)
    {
      if(strcmp(direntp->d_name,filenames[i])==0)
       break;
    }
    switch(i)
    {
      case capability: printf("%s 该数据表示“能力”。\n",direntp->d_name); break;
      case removable : printf("%s 该数据表示“可移动的磁盘数”。\n",direntp->d_name); break;
      case size : printf("%s 该数据表示“该分区大小”。\n",direntp->d_name); break;
      case dev : printf("%s 该数据表示:冒号前的数据是“主设备号”,冒号后的数据“次设备号”。\n",direntp->d_name); break;
      case range : printf("%s 该数据表示:对磁盘操作的操作队列。\n",direntp->d_name); break;
      default : printf("参数传递错误!\n"); break;
    }
  }
}                                                             

阅读(4414) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~