学习IO的时候,我们都曾经利用文件IO函数,标准IO函数都实现了对文件的拷贝,

对某一个文件进行拷贝时,我们可以考虑一下几种方式:

a.单进程拷贝:

假设某一文件需要拷贝100字节,每一个时间片可以完成拷贝20个字节工作量,则需要被分配5个时间片才可以完成任务,但问题是这些个时间片并不是被连续分配的,我们并不知道

到经过多少时间片才会有下一个能分配给该进程的时间片,为了解决这个问题,我们有了第二种方法。

b.多进程拷贝(单核单CPU):

通过切换进程,随着进程数的增加,当前程序获得时间片所需要的时间也就更少。

c.多进程拷贝(多核并发处理)

我们要实现的是第二个方法,代码如下:

 #include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/wait.h>
int cutting(char *src,int prono)
{
int fd,filesize;
if((fd=open(src,O_RDONLY))==-)
{
perror("cutting open failed");
return -;
}
if((filesize=lseek(fd,,SEEK_END))==-)
{
perror("filesize failed");
close(fd);
return -;
}
int blocksize;
if(filesize%prono==)
{
blocksize=filesize/prono;
}
else
{
blocksize=filesize/prono+;
}
close(fd);
//printf("%d",blocksize);
return blocksize; }
int copy(char *src,char *des,int pos,int blocksize)
{
if(access(src,F_OK)==-)
{
perror("acess failed");
}
int fd1,fd2;
char buf[blocksize];
fd1=open(src,O_RDONLY);
fd2=open(des,O_WRONLY|O_CREAT,);
lseek(fd1,pos,SEEK_SET);
lseek(fd2,pos,SEEK_SET); int len=read(fd1,buf,sizeof(buf));
write(fd2,buf,len);
close(fd1);
close(fd2);
return ;
}
int create(char *src,char *des,int blocksize,int prono)
{
int i;
pid_t pid;
int pos=;
for(i=;i<prono;i++)
{
pid=fork();
if(pid>)
{
pos+=blocksize; //printf("当前读取位置为:%d,每次所读文件大小:%d,当前进程为%d\n",pos,blocksize,getpid()); } else if(pid==)
{
copy(src,des,pos,blocksize); printf("当前读取位置为:%d,每次所读文件大小:%d,当前进程为%d\n",pos,blocksize,getpid());
break;
} }
return ;
}
int main(int argc,char **argv)
{
int prono;
int blocksize;
if(argc<)
{
printf("the canshu you have chuan are too less\n");
}
if(argv[]!=)
{
prono=atoi(argv[]);
if(prono<=||prono>=)
{
printf("the num of the process you give cant not less than 0 or more than 100\n");
} }
else prono=;
blocksize=cutting (argv[],prono);
create(argv[],argv[],blocksize,prono); return ;
}

linux--多进程进行文件拷贝的更多相关文章

  1. linux下多进程的文件拷贝与进程相关的一些基础知识

    之前实现了用文件IO的方式能够实现文件的拷贝,那么对于进程而言,我们是否也能够实现呢? 答案是肯定的. 进程资源: 首先我们先回想一下,进程的执行须要哪些资源呢?其资源包含CPU资源,内存资源,当然还 ...

  2. linux常用命令---文件拷贝与传输

    拷贝命令 文件传输

  3. linux把某个文件拷贝到不同的目录下面

    find -name '7*' -type d|xargs -n 1 cp PBClassname.properties

  4. 用rz,sz命令在windows和linux之间传输文件(转)

    转自http://www.linuxmine.com/178.html有很多人没有听说过ZModem协议,更不知道有rz/sz这样方便的工具: 下面一段是从SecureCRT的帮助中copy的: ZM ...

  5. Linux系统下远程文件拷贝scp命令

    在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...

  6. Linux下不同机器之间的文件拷贝

    通过 scp 命令实现不同机器之间的文件拷贝. (1)本机考到目标机器:scp 本机文件 目的地: 如:scp /home/odp-web.war   root@192.168.6.137:/usr/ ...

  7. 使用pscp实现Windows 和 Linux服务器间远程拷贝文件

    转自:http://www.linuxidc.com/Linux/2012-05/60966.htm 在工作中,每次部署应用时都需要从本机Windows服务器拷贝文件到Linux上,有时还将Linux ...

  8. 在Linux系统中如何把文件拷贝到U盘

    Linux下把所有的都当成文件处理,如果在linux系统下需要拷贝文件,哪么你需要先把U盘挂载到系统中的某一个位置,然后再使用cp命令完成拷贝.   工具/原料 Linux操作系统一台 U盘一枚 方法 ...

  9. linux服务器间文件夹拷贝

    要求,在A机器执行脚本,把A机器的某个目录文件拷贝到B机器. 第一版ftp实现: 1.A 机器先安装 ftp 客户端 $ sudo yum install ftp 2.B机器安装ftp服务端 $ su ...

  10. 【原创】Linux基础之linux服务器服务器间拷贝文件

    linux服务器服务器间拷贝文件,有几种方式: 1 如果是定时任务,可以用rsync 2 如果是基于ssh登录,可以用scp,优点是可以实现远程到远程的拷贝,缺点是需要账号密码 upload: scp ...

随机推荐

  1. Linux基础命令---mkisofs

    mkisofs mkisofs指令可以创建ISO9660/Joliet/HFS文件系统,现在使用指令genisoimage代替它.genisoImage是一个预掌握程序,用于生成iso 9660/jo ...

  2. 手撕vue-cli配置文件——check-versions.js篇

    check-versions.js,vue-cli中检查版本的js文件. 'use strict' const chalk = require('chalk') const semver = requ ...

  3. mysql-innodb的事务日志

    [参考书籍:mysql技术内幕 INNODB存储引擎][参考了一些博客内容] 事务的隔离性由锁机制来实现,事务的原子性,一致性,持久性通过INNODB的redo log和undo log来完成. re ...

  4. WebSocket协议详解

    转自 http://www.cnblogs.com/lizhenghn/p/5155933.html 1. websocket 是什么 websocket 是html5提出的一个协议规范,参考rfc6 ...

  5. 20145313张雪纯Exp8 Web基础

    回答问题 (1)什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域:包含了文本框. ...

  6. 20145337《网络对抗技术》逆向及BOF基础

    20145337<网络对抗技术>逆向及BOF基础 实践目标 操作可执行文件pwn1,通过学习两种方法,使main函数直接执行getshall,越过foo函数. 实践内容 手工修改可执行文件 ...

  7. VC++ 利用CreateFile、ReadFile和WriteFile实现CopyFile

    1. CreateFile:这是一个多功能的函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道. 参照:http://www.cppblo ...

  8. ActiveMQ、RabbitMQ、RocketMQ、Kafka 对比(图示)

    RabbitMQ 和 Kafka 对比,一篇好的介绍文章:https://my.oschina.net/u/236698/blog/501834 ActiveMQ.RabbitMQ.RocketMQ. ...

  9. spring注解注入properties配置文件

    早期,如果需要通过spring读取properties文件中的配置信息,都需要在XML文件中配置文件读取方式. 基于XML的读取方式: <bean class="org.springf ...

  10. TeeChart入门

    此链接可以作为参考http://tech.sina.com.cn/s/2008-07-07/1612722495.shtml 需要添加引用 using Steema.TeeChart;//tchart ...