文件系统编程

 

1.低级文件编程

  1. /*
  2.  *    低级文件编程 
  3.  *    打开创建一个文件并设定其权限
  4.  *    Lzy        2011-6-9
  5.  */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <fcntl.h>
  9. #include <sys/stat.h>

  10. int main(void)
  11. {
  12.     int fd;                        //定义文件描述符
  13.     
  14.     /*创建文件设置权限为777,但最后并不是777,这是因为umask*/
  15.     fd = open("lzy.txt", O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IROTH);        //创建lzy文件,可读写打开文件
  16.     if(fd < 0)                    //打开是否成功
  17.     {
  18.         perror("open error");    //在标准输出打印出错误信息
  19.         exit(-1);
  20.     }

  21.     close(fd);                    //关闭文件
  22.     return 0;
  23. }


  1. /*
  2.  *    低级文件编程 
  3.  *    写入字符串至文件
  4.  *    Lzy        2011-6-9
  5.  */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <fcntl.h>
  10. #include <sys/stat.h>
  11. #include <error.h>

  12. int main(void)
  13. {
  14.     int fd_1;                        //定义文件描述符
  15.     char buf[100];                        //临时缓冲区
  16.     
  17.     fd_1 = open("lzy_1.txt", O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IROTH);    //可读写打开文件
  18.     if(fd_1 < 0)                    //打开是否成功
  19.     {
  20.         perror("open fd_1 error");    //在标准输出打印出错误信息
  21.         exit(-1);
  22.     }
  23.     
  24.     
  25.     printf("输入字符:");
  26.     scanf("%s",buf);

  27.     if(write(fd_1, buf, strlen(buf)) == -1)        //把字符串写入文件
  28.     {
  29.         perror("write error");
  30.         exit(-1);
  31.     }
  32.     
  33.     close(fd_1);                    //关闭文件
  34.     return 0;
  35. }


  1. /*
  2.  *    低级文件编程 
  3.  *    文件复制
  4.  *    Lzy        2011-6-9
  5.  */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <fcntl.h>
  10. #include <sys/stat.h>
  11. #include <error.h>

  12. int main(int argc, char *argv[])
  13. {
  14.     int fd_1, fd_2;                        //定义文件描述符
  15.     char buf[100];                        //临时缓冲区
  16.     int ctr, ctw;

  17.     if(argc != 2)                        //检查命令行参数个数
  18.     {
  19.         printf("参数太少\n");
  20.         exit(0);
  21.     }
  22.     
  23.     fd_1 = open("lzy_1.txt", O_RDONLY);    //可读方式打开源文件
  24.     if(fd_1 < 0)                        //打开是否成功
  25.     {
  26.         perror("open fd_1 error");        //在标准输出打印出错误信息
  27.         exit(-1);
  28.     }

  29.     fd_2 = open(argv[1],O_WRONLY | O_CREAT, 00766);    //打开目标文件,不存在创建
  30.     if(fd_2 < 0)
  31.     {
  32.         perror("open fd_2 error");        //在标准输出打印出错误信息
  33.         exit(0);
  34.     }
  35.     
  36.     
  37.     /*文件拷贝*/
  38.     while((ctr = read(fd_1, buf, sizeof(buf))) != 0)        //读文件直至文件结束
  39.     {
  40.         if(ctr == -1)                //读发生错误
  41.         {
  42.             perror("read fd_1 error");        
  43.             exit(0);
  44.         }
  45.         else
  46.         {
  47.             ctw = write(fd_2, buf, ctr);    //写入文件
  48.             if(ctw == -1)
  49.             {
  50.                 perror("write fd_2 error");        
  51.                 exit(0);
  52.             }            
  53.         }
  54.     }
  55.     
  56.     close(fd_2);
  57.     close(fd_1);                    //关闭文件
  58.     return 0;
  59. }

2. 低级IO映射到高级IO 

分类: LINUX

/*

 * FILE * fdopen(int FD, const char * MODE)

 将标准输入的内容保存到磁盘文件中

 * Lzy 2011-6-8

 */

 

#include

#include

#include

 

int main(void)

{  

    char buf[100];       //自定义缓冲区

    FILE *fpr, *fpw;  //定义两个文件指针

 

    fpr = fdopen(STDIN_FILENO,"r"); //打开低级标准输入文件

    if(!fpr)           //打开文件是否成功

    {

        printf("打开低级标准输入文件失败!\n");

        exit(-1);

    }

 

    fpw = fopen("lzy.txt","w+");    //打开文件

    if(!fpw)

    {

        printf("打开文件失败!\n");

        exit(-1);

    }

   

    while(fgets(buf,99,fpr)) //读低级标准输入文件直至文件结束

    {

        fputs(buf,fpw);       //写入要保存的文件

    }

 

    fclose(fpr);  //关闭文件

    fclose(fpw);

 

    return 0;

}

3.文件目录操作

  1. /*
  2.  * 目录操作
  3.  * 创建文件
  4.  * Lzy 2011-6-10
  5.  */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9. #include <fcntl.h>

  10. int main(int argc, char *argv[])
  11. {
  12.     int ret;
  13.     
  14.     if(argc != 2)        //检查命令行参数个数
  15.     {
  16.         printf("参数太少\n");
  17.         exit(0);
  18.     }

  19.     ret = mkdir(argv[1], 00766);            //创建目录
  20.     if(ret == -1)
  21.     {
  22.         perror("mkdir fail");
  23.         exit(0);
  24.     } 

  25.     return 0;
  26. }
  1. /*
  2.  * 目录操作
  3.  * 删除文件
  4.  * Lzy 2011-6-10
  5.  */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9. #include <fcntl.h>

  10. int main(int argc, char *argv[])
  11. {
  12.     int ret;
  13.     
  14.     if(argc != 2)        //检查命令行参数个数
  15.     {
  16.         printf("参数太少\n");
  17.         exit(0);
  18.     }

  19.     ret = rmdir(argv[1]);            //删除目录
  20.     if(ret == -1)
  21.     {
  22.         perror("rmdir fail");
  23.         exit(0);
  24.     } 

  25.     return 0;
  26. }

  1. /*
  2.  * 目录操作
  3.  * 列出指定目录下的所有文件和目录
  4.  * Lzy 2011-6-10
  5.  */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9. #include <fcntl.h>
  10. #include <dirent.h>
  11. #include <sys/types.h>

  12. int main(int argc, char *argv[])
  13. {
  14.     DIR *dp;                        //定义指向DIR结构的指针
  15.     struct dirent *dirp;    

  16.     if(argc != 2)                //检查命令行参数个数
  17.     {
  18.         printf("参数太少\n");
  19.         exit(0);
  20.     }

  21.     dp = opendir(argv[1]);                    //打开目录
  22.     if(dp == NULL)                                //检查打开是否成功
  23.     {
  24.         perror("opendir fail");
  25.         exit(0);
  26.     }

  27.     while((dirp = readdir(dp)) != NULL)            //读取目录文件
  28.     {
  29.         if((strcmp(dirp->d_name,".") == 0) || (strcmp(dirp->d_name,"..") == 0))        //跳过当前目录和父目录 
  30.             continue;

  31.         if(dirp->d_type == DT_DIR)                    //目录文件
  32.         {
  33.             printf("%s \t" ,dirp - >d_name ) ;
  34.         }
  35.         else                                                //普通文件
  36.             printf("%s\t",dirp->d_name);

  37.     }
  38.     
  39.     closedir(dp);                //关闭目录
  40.     return 0;
  41. }
  1. /*
  2.  * 目录操作
  3.  * 获取更改当前工作目录
  4.  *     Lzy 2011-6-10
  5.  */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9. #include <fcntl.h>
  10. #include <dirent.h>
  11. #include <sys/types.h>

  12. int main(void)
  13. {
  14.     char buf[256];
  15.     int ret;

  16.     getcwd(buf,sizeof(buf));            //获取当前工作目录
  17.     printf("当前工作目录%s\n",buf);

  18.     ret = chdir("..");                            //更改工作目录
  19.     if(ret == -1)
  20.     {
  21.         perror("chdir fail");
  22.         exit(0);
  23.     } 
  24.     
  25.     getcwd(buf,sizeof(buf));            //获取工作目录
  26.     printf("工作目录%s\n",buf);

  27.     return 0;
  28. }

4.文件测试

  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.  *    列举目录
  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. }

5.文件属性

  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.  * 测试文件属性
  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. }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值