Chinaunix首页 | 论坛 | 博客
  • 博客访问: 837245
  • 博文数量: 489
  • 博客积分: 475
  • 博客等级: 下士
  • 技术积分: 3087
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 16:28
文章分类

全部博文(489)

文章存档

2013年(7)

2012年(301)

2011年(181)

分类:

2011-12-22 21:03:09

 /*

 * Linux_C实现将文件导出至U

 * 只支持文件拷贝

 * 时间: 2011118

 */

 

#include

#include

#include

#include

#include

#include

#include

#include

 

#define BUFFER_SIZE 512

 

int main(int argc, char *argv[])

 {

     int fdr,fdw; /* 文件描述符 fdr->源文件 fdw->目标文件 */

     char buffer[BUFFER_SIZE];  /* 定义缓冲区 */

     int cntr, cntw;

     char *ptr;

     char FileName[20];

         

     /* 获得要复制文件名 */

     if(argc < 2)

     {

         printf("输入要复制文件名: ");

         exit(1);

     }

         

     /*只读方式打开源文件*/

     fdr = open(argv[1], O_RDONLY);    

     if(fdr < 0)

     {

         perror("Open fdr failed");

         exit(-1);

     }

     

      /* 扗载U盘至/mnt目录 */

     if(system("mount /dev/sda1 /mnt") < 0)

     {

         printf("mount USB failed\n");

         exit(0);

     }

   

     sprintf(FileName,"/mnt/%s",argv[1]);

     /*以写的方式打开文件,如果文件不存在则创建,其权限 可读写*/

     fdw = open(FileName, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);

     if(fdw < 0)

     {

         perror("Open fdw failed");

         exit(-1);

     }

     

     /* 文件拷贝 */

     while((cntr = read(fdr, buffer, BUFFER_SIZE)) != 0) /* 读文件 */

     {

         if(cntr < 0) /*文件读取是否出错*/

         {

             perror("read error");

             break;

         }

         else if(cntr > 0) /* 读取文件成功,数据长度为cntr*/

         {

             ptr = buffer;

             while((cntw = write(fdw, ptr, cntr)) != 0) /* 将读取的长度写入到目标文件中 */

             {

                if(cntw < 0) /*文件读取是否出错*/

                 {

                     perror("write error");

                     break;

                 }

                else if(cntr == cntw)  /* 写入字节和读取字节相同,数据全部写入 */

                    break;

                else if(cntw > 0)    /* 写入字节小于读取字节,只有部分数据写入 */

                {

                    ptr += cntw; /* 指向未写入的数据,接下来再次执行写入操作 */

                    cntr -= cntw;                

                }

             }

             if(cntw < 0) /*文件读取是否出错*/

             {

                 perror("write error");

                 break;

             }

         }     

     }

             

     /* 关闭文件 */

    close(fdr);

    close(fdw);

   

     /* 制载U盘至/mnt目录 */

     if(system("umount /mnt") < 0)

     {

         printf("umount USB failed\n");

         exit(0);

     }

   

    printf(" Done!\n");

     

    return 0;

 }

 

源码: usb_RW.rar  

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