精华内容
下载资源
问答
  • python写的可以实现linux文件拷贝的功能
  • Linux下C语言实现文件拷贝

    热门讨论 2012-10-09 09:41:55
    Linux下用C语言实现文件拷贝的代码
  • Linux实现拷贝文件

    2019-03-21 11:47:58
    Linux下一个简单的实现文件拷贝的代码: #include<stdlib.h> #include<unistd.h> #include<string.h> #include<assert.h> #include<fcntl.h> int main() { int fdr = open("./...

    Linux下一个简单的实现文件拷贝的代码:

    #include<stdlib.h>
    #include<unistd.h>
    #include<string.h>
    #include<assert.h>
    #include<fcntl.h>
    
    int main()
    {
    	int fdr = open("./passwd",O_RDONLY);
    	assert(fdr != -1);
    
    	int fdw = open("newpasswd",O_WRONLY|O_CREAT,0600);
    	assert(fdw != -1);
    
    	char buff[256] = {0};
    	int num = 0;
    	while((num = read(fdr,buff,256)) > 0)
    	{
    		write(fdw,buff,num);
    	}
    
    	close(fdr);
    	close(fdw);
    
    	exit(0);
    }
    

    源文件passwd,目标文件newpasswd

    文件大小以及权限如上!

     

    展开全文
  • linux 系统调用实现文件拷贝 copyfile程序如下: #include<iostream> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <string.h> #include <sys/...

    linux 系统调用实现文件拷贝

    copyfile程序如下:

    #include<iostream>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <unistd.h>
    #include<string>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/wait.h>
    
    
    using namespace std;
    
    void CoypFile(string  sourceFile, string objFile)
    {
        int fd1 = 0;//源文件描述符
        int fd2 = 0;//目标文件描述符
        struct flock  lock;//文件锁结构体
        memset(&lock, 0, sizeof(struct flock));
        lock.l_start = 0;
        lock.l_whence = SEEK_SET;
        lock.l_len = 0;
        ssize_t r_size;//读文件返回长度
        char buffer[10] = { 0 };
        fd1 = open(sourceFile.c_str(), O_RDWR);//打开源文件 只读   
        fd2 = open(objFile.c_str(), O_CREAT | O_RDWR, 0777);//打开目标文件 没有就创建        
        //判断文件是否正常打开
        if (fd1 < 0)
        {
            perror("open fail");
            return;
        }
        else
        {
            if (fcntl(fd2, F_GETLK, &lock) == 0)//调用成功返回0
            {
                if (lock.l_type == F_WRLCK)
                {
                    cout << "已经有写锁" << endl;
                }
                else if (lock.l_type != F_WRLCK)//不是写锁  设置写锁
                {
                    lock.l_type = F_WRLCK;
                    if (fcntl(fd2, F_SETLK, &lock) == 0)//是否设置写锁成功
                    {
                        while ((r_size = read(fd1, buffer, sizeof(buffer))) > 0)
                        {
                            write(fd2, buffer, r_size);//读到的内容写到文件2
                            memset(buffer, 0x0, sizeof(buffer));
                        }
                        close(fd1);
                        close(fd2);
    
                    }
                }
            }
    
        }
    }
    
    main()
    {
        CoypFile("/home/whb/projects/CopyFile/a", "/home/whb/projects/CopyFile/b");
        return 0;
    }
    

    运行效果:
    在这里插入图片描述

    展开全文
  • linux系统下实现文件拷贝

    千次阅读 2017-07-28 21:41:15
    linux系统下实现文件的方式

    1,利用read, write实现文件拷贝

    #include<stdio.h>
    #include<fcntl.h>
    #include<stdlib.h>
    #include<unistd.h>
    
    int main(int argc, char* argv[])
    {
      if(argc < 3)
      {
        printf("input fail\n");
        exit(-1);
      }
      int fd1 = open(argv[1], O_RDONLY);
      if(fd1 == -1)
      {
        perror("open fail");
        exit(1);
      }
    
      int fd2 = open(argv[2], O_CREAT | O_RDWR, 0664);
      if(fd2 == -1)
      {
    	  perror("open fail");
          exit(1);
      }
    
      char c;
      int len = read(fd1, &c, sizeof(char));
      while(len)
      {
        write(fd2, &c, len);
        len = read(fd1, &c, sizeof(char));
      }
      close(fd1);
      close(fd2);
      return 0;
    }
                             
    

    2,利用mmap映射区实现拷贝,将源文件和目的文件都映射到共享映射区

    #include<stdio.h>
    #include<fcntl.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sys/mman.h>
    #include<sys/wait.h>
    #include<sys/stat.h>
    #include<string.h>
    int main(int argc, char* argv[])
    {
      if(argc < 3)
      {
        printf("input fail\n");
        exit(-1);
      }
      int src_fd = open(argv[1], O_RDONLY);//源文件
      if(src_fd == -1)
      {
        perror("open fail");
        exit(1);
      }
    
      struct stat statbuff;//获取源文件的大小
      stat(argv[1], &statbuff);
      int filesize = statbuff.st_size;
    
      int dst_fd = open(argv[2], O_CREAT | O_RDWR, 0664);//目的文件
      if(dst_fd == -1)
      {
        perror("open fail");
        exit(1);
      }
      ftruncate(dst_fd, filesize);//目的文件大小等于源文件
    
      void* src_mm;
      char* dst_mm;
      src_mm = mmap(NULL, filesize, PROT_READ, MAP_SHARED, src_fd, 0);//源文件映射
      if(src_mm == MAP_FAILED)
      {
        perror("mmap1 fail");
        exit(1);
      }
      dst_mm = mmap(NULL, filesize, PROT_READ | PROT_WRITE, MAP_SHARED, dst_fd, 0);//目的文件映射
       if(dst_mm == MAP_FAILED)
      {
        perror("mmap2 fail");
        exit(1);
      }
      memcpy(dst_mm, src_mm, filesize);//拷贝
      munmap(dst_mm, filesize);//释放共享映射区
      munmap(src_mm, filesize);
      close(src_fd);
      close(src_fd);
      return 0;
    

    3,利用多进程和mmap共享映射区实现拷贝

    #include<stdio.h>
    #include<fcntl.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sys/mman.h>
    #include<sys/wait.h>
    #include<sys/stat.h>
    #include<string.h>
    #define N 5
    
    int main(int argc, char* argv[])
    {
      if(argc < 3)
      {
        printf("input fail\n");
        exit(-1);
      }
      int src_fd = open(argv[1], O_RDONLY);
      if(src_fd == -1)
      {
        perror("open fail");
        exit(1);
      }
      
      struct stat statbuff;
      stat(argv[1], &statbuff);
      int filesize = statbuff.st_size;
    
      int copyLen = filesize/N; //每个进程复制文件的大小
      int lastCopyLen = filesize%copyLen+copyLen; //最后一个进程复制的文件大小,因为要复制到文件末尾
    
      int dst_fd = open(argv[2], O_CREAT | O_RDWR, 0664);
      if(dst_fd == -1)
      {
        perror("open fail");
        exit(1);
      }
      ftruncate(dst_fd, filesize);
    
      void* src_mm;
      void* dst_mm;
      src_mm = mmap(NULL, filesize, PROT_READ, MAP_SHARED, src_fd, 0);//源文件映射
      if(src_mm == MAP_FAILED)
      {
        perror("mmap1 fail");
        exit(1);
     }
      dst_mm = mmap(NULL, filesize, PROT_READ | PROT_WRITE, MAP_SHARED, dst_fd, 0);//目的文件映射
      if(dst_mm == MAP_FAILED)
      {
        perror("mmap2 fail");
        exit(1);
      }
    
      int i;
      pid_t pid;
      for(i = 0;i < N;i++)//创建5个进程
      {
         pid = fork();
         if(pid == 0)
           break;
         else if(pid == -1)
         {
           perror("create process fail");
           exit(1);
         }
      }
      
      if(i < N)//子进程复制
      {
        void* des_addr = dst_mm+i*copyLen;
        void* src_addr = src_mm+i*copyLen;
        if(i == N-1)//最后一个子进程
          memcpy(des_addr, src_addr, lastCopyLen);
        else//其他子进程
          memcpy(des_addr, src_addr, copyLen);
      }
      else
      {
        pid_t p;
        do
        {
          p = waitpid(-1, NULL, WNOHANG);
          sleep(1);
        }while(p==0 || p != -1);//父进程不阻塞轮询回收子进程
        printf("waitpid finish\n");
        munmap(dst_mm, filesize);//释放共享映射区
        munmap(src_mm, filesize);
        close(src_fd);//关闭文件
        close(des_fd);
      }
      return 0;
    
    
    展开全文
  • 利用Linux提供的系统IO函数(eg:open , close , read , write ,lseek ),现两个文件拷贝,文件名从命令行参数传入: ./a.out 11.txt 22.txt #include <stdio.h> #include <sys/types.h> #...

    问题引入:
    利用Linux提供的系统IO函数(eg:open , close , read , write ,lseek ),现两个文件的拷贝,文件名从命令行参数传入:
    ./a.out 11.txt 22.txt

    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    
    int main(int argc,char*argv[])
    {
     //打开文件两个文件
     int fd1 = open(argv[1],O_RDONLY);
     if(fd1 == -1)
     {
      perror("open fd1 error:");
      return -1;
     }
     
     int fd2 = open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0666);
     if(fd2 == -1)
     {
      perror("open fd2 error:");
      close(fd1);
      return -1;
     }
     
     //操作文件
     //一个进行读,一个进行写
     while(1)
     {
      char buf[32];
      int re = read(fd1,buf,32);
      if(re == 0)
      {
       break;
      }
      write(fd2,buf,re);
     }
     
     //关闭文件
     close(fd1);
     close(fd2);
    }

    关注博主不迷路,博主带你上高速!

    展开全文
  • 主要包括两个文件,分别在Linux和Windows环境下实现文件拷贝功能。
  • 题目:在linux下运用5个进程拷贝一个大文件 #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<dirent.h> #include<unistd.h> #include<fcntl.h> ...
  • 测试结果File :G:/from_42MB.rar ---- Buffer Size : 1024--------------coypByMbb time consumed(buffer size no effect) : 47copyByNioTransferFrom time consumed(buffer size no effect) : 62...
  • Linux实现文件拷贝(代码保留)

    千次阅读 2015-09-20 12:10:07
    通过结构体来实现struct stat实现文件拷贝。 执行程序时的输入形式:程序名称 源文件路径及名称 目标文件路径及名称 实现将源文件中的内容完全拷贝到目标文件中。 代码如下: #include #include #...
  • Linux文件拷贝

    2017-07-28 16:54:11
    一切皆文件 这是我四个月前第...这个命令大家都很熟悉了 今天想自己实现 如何实现文件拷贝 ; 1.1版本 : 刚着手时候的想法很朴素 就像把大象装进冰箱里的想法一样 分三步;  step 1: 打开源文件和目的文件
  • Linux下C语言实现文件拷贝 /*  Function:copy file from file1 to file2  How to execute: ./copyfile file1 file2 (under Linux)  Data:2007-05-09 */   #include /*fprintf(),stderr,
  • printf的格式化输出中,可以设置前景色和背景色,因此进度条的颜色可以通过printf的格式化输出来实现;此外,进度条的实现主要依靠&amp;amp;quot;\r&amp;amp;quot;和&amp;amp;quot;fflush(stdout)“来...
  • win7中将文件拷贝到虚拟机linux下(本人的linux操作系统是centos6.0)的方法: 如下图,在已安装好的虚拟主机上点击右键,选setting,在弹出的菜单中选options,选shared flolders 勾选右边的always enabled然后选下面...
  • linux文件拷贝函数

    2010-01-14 17:42:33
    本函数可以实现文件拷贝,应用在linux
  • 主要介绍了linux下如何实现快速拷贝文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Linux】利用管道实现文件拷贝

    千次阅读 2019-01-11 17:30:01
    Linux下一切皆文件,所以管道也是一个文件。 在讲管道之前,我们先提一下涉及一点点其他的知识: 多进程看到一份公共的资源叫做临界资源; 把访问临界资源的代码区域称为临界区; 任何时候只有一个进程进入临界...
  • 通过书籍和查资料写的程序,自己上机调试运行过,代码中添加注释。
  • Linux下的文件拷贝

    2018-05-30 15:07:36
    linux系统下实现文件拷贝功能,从U盘SD卡,拷贝文件到Linux内置存储当中,支持文件夹拷贝
  • Linux C实现简单的文件拷贝

    千次阅读 2017-11-24 20:36:18
    Linux C实现简单的文件拷贝 这里的b.c文件是提前创建好的里面写了东西 #include #include #include #include #include int main() { const char* pathName="a.c"; int in,out,flag; char buffer[1024]; in=...
  • LinuxC实现文件夹及文件拷贝

    千次阅读 2017-12-04 15:35:16
    LinuxC实现文件夹及文件拷贝 #include #include #include #include #include #include #include //判断是否为目录 int is_dir(char *path) { struct stat st; stat(path,&st); if(S_ISDIR(st.st_mode)) retu
  • Linux 实现多进程拷贝文件

    千次阅读 2018-12-04 23:30:40
    //copy.c #include #include #include #include ...linux下利用fork实现多进程拷贝文件。本程序拷贝的是就是其本身copy.c文件。本代码只注重实现,容错处理并未加全。纯原创,欢迎留言讨论指出bug。
  • 继《Java文件的简单读写、随机读写、NIO读写与使用MappedByteBuffer读写》,本篇通过调用Linux OS文件操作系统函数实现copy命令以加深我们对Java文件读写底层...
  • C linux文件拷贝hello

    2016-11-14 21:32:29
    题目:在C程序中系统调用linux文件操作函数open,read,write,close实现将3行hello打印到指定文件中。 程序如下: #include #include #include #include #include #include #include #define ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,478
精华内容 591
关键字:

linux实现文件拷贝

linux 订阅