• Linux_C实现将文件导出至U盘


    #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
    ");
             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
    ");
             exit(0);
         }
       
        printf(" Done!
    ");
         
        return 0;
     }
  • 相关阅读:
    转载__Java内部类
    Fragment之介绍(转)
    转载__Android-屏幕适配需要注意的地方
    转载__广播机制
    Activity的启动模式--总结
    图片_ _Android--加载大分辨率图片到内存
    转载—— android 瀑布流的实现详解,附源码
    转载_安卓性能优化
    C# Byte[] 数组操作
    C# 测算代码运行时间 Stopwatch
  • 原文地址:https://www.cnblogs.com/secondtononewe/p/6929780.html
Copyright © 2020-2023  润新知