Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631316
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 11:17:59

原文地址:文件属性 作者:luozhiyong131

  1. /*
  2.  *    文件类型测试
  3.  *    查看文件所有者,所属组
  4.  *    Lzy 2011-6-10
  5.  */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <sys/stat.h>
  9. #include <pwd.h>
  10. #include <grp.h>

  11. int main(int argc, char *argv[])
  12. {
  13.     int ret;
  14.     struct stat sbuf;            //定义文件类型结构体
  15.     struct passwd *pwd;            
  16.     struct group *grp;

  17.     if(argc != 2)                //检查命令行参数
  18.     {
  19.         printf("应输入测试文件或目录名\n");
  20.         exit(0);
  21.     }

  22.     ret = stat(argv[1], &sbuf);        //取文件状态信息
  23.     if (ret == -1)
  24.     {
  25.         perror("stat error");
  26.         exit(0);
  27.     }

  28.     /*测试文件类型*/
  29.     if(S_ISREG(sbuf.st_mode))        //测试是否是普通文件
  30.         printf(":%s\n",argv[1]);

  31.     if(S_ISDIR(sbuf.st_mode))        //测试是否是目录
  32.         printf(":%s\n",argv[1]);

  33.     /*查看文件所有者,所属组*/
  34.     pwd = getpwuid(sbuf.st_uid);    //文件所有者
  35.     if(pwd)
  36.         printf("File Ower:%s\n",pwd->pw_name);

  37.     grp = getgrgid(sbuf.st_gid);    //文件所属组
  38.     if(grp)
  39.         printf("File Group:%s\n",grp->gr_name);

  40.     return 0;
  41. }
  1. /*
  2.  *    使用stat函数获取文件的属性    
  3.  *    Lzy    2011-6-12
  4.  */

  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <unistd.h>
  8. #include <sys/stat.h>

  9. int main(int argc, char *argv[])
  10. {
  11.     int ret;
  12.     struct stat stat_buf;    //定义stat结构体变量
  13.     
  14.     if(argc != 2)            //检查命令行参数
  15.     {
  16.         printf("参数太少\n");
  17.         return 0;
  18.     }
  19.     
  20.     ret = stat(argv[1], &stat_buf);        //获取文件属性
  21.     if(ret == -1)
  22.     {
  23.         perror("stat error");
  24.         exit(0);
  25.     }
  26.     
  27.     /*S_IFMT是st_mode中文件类型的屏蔽码*/
  28.     switch(stat_buf.st_mode & S_IFMT)        //判断文件类型
  29.     {
  30.         case S_IFDIR:                        //目录文件
  31.             printf("dir\n");
  32.             break;
  33.             
  34.         case S_IFREG:                        //普通文件
  35.             printf("file\n");
  36.             break;
  37.     }    

  38.     return 0;
  39. }
  1. /*
  2.  * 测试文件属性
  3.  */

  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7. #include <sys/stat.h>
  8. #include <sys/types.h>
  9. #include <pwd.h>
  10. #include <grp.h>

  11. int main(int argc, char * argv[])
  12. {
  13.     struct stat sbuf;
  14.     
  15.     if(argc < 2)
  16.     {//测试命名行是否输入要测试的文件名
  17.         printf("Usage: %s filename\n", argv[0]);
  18.         return 0;
  19.     }
  20.     
  21.     //获取文件信息
  22.     if(lstat(argv[1], &sbuf) < 0)
  23.     {
  24.         perror("lstat");
  25.         exit(-1);
  26.     }
  27.     
  28.     //测试文件类型
  29.     if(S_ISDIR(sbuf.st_mode))
  30.     {//目录
  31.         printf("%s is dircetory.\n", argv[1]);
  32.     }else if(S_ISCHR(sbuf.st_mode))
  33.     {//字符设备节点
  34.         printf("%s is char device.[%d %d]\n",
  35.                 argv[1],
  36.                 sbuf.st_dev,
  37.                 sbuf.st_rdev);
  38.     }else if(S_ISBLK(sbuf.st_mode))
  39.     {//块设备节点
  40.         printf("%s is block device.[%d %d]\n",
  41.                 argv[1],
  42.                 sbuf.st_dev,
  43.                 sbuf.st_rdev);
  44.     }else if(S_ISLNK(sbuf.st_mode))
  45.     {//符号链接文件
  46.         printf("%s is symbol link file.\n", argv[1]);
  47.     }else if(S_ISREG(sbuf.st_mode))
  48.     {//普通文件
  49.         struct passwd * pwd;
  50.         struct group * grp;
  51.         
  52.         pwd = getpwuid(sbuf.st_uid);
  53.         grp = getgrgid(sbuf.st_gid);
  54.         printf("%s is normal file.\n", argv[1]);
  55.         printf("\tsize=%d Bytes\n", sbuf.st_size);
  56.         printf("\tuser is %s\n",
  57.             pwd ? pwd->pw_name : "");
  58.         printf("\tgroup is %s\n",
  59.             grp ? grp->gr_name : "");
  60.         printf("\t%c%c%c%c%c%c%c%c%c\n",
  61.             (sbuf.st_mode & S_IRUSR) ? 'r' : '-',
  62.             (sbuf.st_mode & S_IWUSR) ? 'w' : '-',
  63.             (sbuf.st_mode & S_IXUSR) ? 'x' : '-',
  64.             (sbuf.st_mode & S_IRGRP) ? 'r' : '-',
  65.             (sbuf.st_mode & S_IWGRP) ? 'w' : '-',
  66.             (sbuf.st_mode & S_IXGRP) ? 'x' : '-',
  67.             (sbuf.st_mode & S_IROTH) ? 'r' : '-',
  68.             (sbuf.st_mode & S_IWOTH) ? 'w' : '-',
  69.             (sbuf.st_mode & S_IXOTH) ? 'x' : '-');
  70.         printf("\tblock size=%d\n", sbuf.st_blksize);
  71.         printf("\tblock number=%d\n", sbuf.st_blocks);
  72.     }
  73.     
  74.     return 0;
  75. }
  1. /*
  2.  *    access函数获取文件的权限    
  3.  *    Lzy    2011-6-12
  4.  */

  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <unistd.h>
  8. #include <sys/stat.h>

  9. int main(int argc, char *argv[])
  10. {    
  11.     if(argc != 2)            //检查命令行参数
  12.     {
  13.         printf("参数太少\n");
  14.         return 0;
  15.     }
  16.     
  17.     if(access(argv[1], F_OK) == 0)        //判断文件是否存在
  18.     {
  19.         if(access(argv[1], R_OK) == 0)    //文件可读
  20.             printf("read\n");
  21.         
  22.         if(access(argv[1], W_OK) == 0)    //文件可写
  23.             printf("write\n");
  24.             
  25.         if(access(argv[1], X_OK) == 0)    //文件可执行
  26.             printf("execute\n");
  27.     }
  28.     else
  29.     {
  30.         printf("文件不存在\n");
  31.     }
  32.     
  33.     return 0;
  34. }
  1. /*
  2.  *    chmod函数修改文件的权限    
  3.  *    Lzy    2011-6-12
  4.  */

  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <unistd.h>
  8. #include <sys/stat.h>

  9. int main(int argc, char *argv[])
  10. {    
  11.     int ret;
  12.     if(argc != 2)            //检查命令行参数
  13.     {
  14.         printf("参数太少\n");
  15.         return 0;
  16.     }
  17.     
  18.     ret = chmod(argv[1], 00777);    //修改文件访问权限
  19.     if(ret == -1)
  20.     {
  21.         perror("chmod error");
  22.         exit(0);
  23.     }
  24.     
  25.     printf("Done\n");
  26.     return 0;
  27. }
  1. /*
  2.  *    列举目录
  3.  *    Lzy 2011-6-10
  4.  */

  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <dirent.h>

  8. int main(int argc, char *argv[])
  9. {
  10.     DIR *dp;
  11.     struct dirent *dirp;    

  12.     if(argc != 2)                //检查命令行参数
  13.     {
  14.         printf("应输目录名\n");
  15.         exit(0);
  16.     }
  17.     
  18.     dp = opendir(argv[1]);        //打开目录
  19.     if(dp == NULL)
  20.     {
  21.         perror("opendir fail");
  22.         exit(0);
  23.     }

  24.     while((dirp = readdir(dp)) != NULL)        //列举所有文件和目录
  25.     {
  26.         printf("%s\t",dirp->d_name);
  27.     }

  28.     closedir(dp);                //关闭目录
  29.     return 0;
  30. }
阅读(204) | 评论(0) | 转发(0) |
0

上一篇:atexit函数

下一篇:文件测试

给主人留下些什么吧!~~