Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140437
  • 博文数量: 43
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-28 21:57
文章分类

全部博文(43)

文章存档

2012年(40)

2011年(3)

分类:

2012-05-15 16:27:09

原文地址:模拟实现linux的cp命令 作者:908416047




  1. #include <stdio.h>
  2. #include <stdlib.h>/*包含system函数*/
  3. #include <fcntl.h>/*包含open函数*/

  4. int open_file(char *_filename,int flag,mode_t mode);
  5. int copy_file(char *_src,char *_des);
  6. int main(int argc,char **argv)
  7. {
  8.     copy_file(argv[1],argv[2]);
  9. }


  10. /*********************************************************
  11. ** 函 数 名:int open_file(char *_filename,int flag,mode_t mode)
  12. ** 功能描述:打开文件明为filename的文件
  13. ** 输入参数: filename - char* <文件名称>
  14.      flag - int <文件属性>
  15.             flag:
  16.                 O_CREAT <文件不存在时建立文件>
  17.                 O_RDONLY
  18.                 O_WRONLY
  19.                 O_APPEND
  20.                 O_TRUNG <设置文件的长度0,并舍弃现存的数据>
  21.                 O_EXCL <与O_CREAT 一起使用,如果文件存在,则打开失败>
  22.              mode - mode_t <文件权限>
  23.             mode:
  24.                 0666 <000 110 110 110>
  25. ** 输出参数:
  26. ** 返 回 值: - int <打开成功返回文件描述发,失败返回0>
  27. ** 作 者:<张洪波>
  28. ** 日 期:2011-5-20
  29. ** 修 改:<修改人>
  30. ** 日 期:
  31. **********************************************************/
  32. int open_file(char *_filename,int _flag ,mode_t _mode)
  33. {
  34.     int fd = 0;
  35.     fd = open(_filename,_flag,_mode);
  36.     if(fd < 0)
  37.     {
  38.         perror("Open file error");
  39.     }
  40.     return fd;
  41.     
  42. }


  43. /*********************************************************
  44. ** 函 数 名:int copy_file(char *_src,char *_des)
  45. ** 功能描述:模拟linux的cp命令,实现文本文件的拷贝
  46. ** 输入参数: _src - char* <源文件名称>
  47.                        _des - char* <目标文件名称>
  48. ** 输出参数: x - 类型 <说明>
  49. ** 返 回 值: - int <成功返回1,失败返回0>
  50. ** 作 者:<张洪波>
  51. ** 日 期:
  52. ** 修 改:<修改人>
  53. ** 日 期:
  54. **********************************************************/

  55. int copy_file(char *_src,char *_des)
  56. {
  57.     int src_flags = O_RDONLY;
  58.     int des_flags = O_CREAT | O_TRUNC | O_WRONLY;
  59.     int src_fd = open_file(_src,src_flags,0666);
  60.     int des_fd = open_file(_des,des_flags,0666);
  61.     char buf[100];
  62.     int nbytes;//每次读取的字节个数
  63.     int write_ret;
  64.     /*读文件,写文件*/
  65.     
  66.     while(nbytes = read(src_fd,buf,100))/*每次从源文件读取100字节数据到buf*/
  67.     {
  68.         //printf("%d\n",nbytes);
  69.         write_ret = write(des_fd,buf,nbytes);/*将buf中的数据写入目标文件*/
  70.         if(write_ret < 0)
  71.         {
  72.             perror("Write error");
  73.             exit(1);
  74.         }
  75.     }
  76.     close(src_flags);
  77.     close(des_flags);
  78.     printf("复制文件%s到%s成功!\n",_src,_des);
  79. }
阅读(1000) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~