7月2日作业

思维导图


一、创建一个进程扇

代码

cpp 复制代码
#include <25041head.h>

int main(int argc, const char *argv[])
{
    pid_t pid;
    for(int i=1;i<=4;i++)
    {
        pid=fork();
        if(pid>0)
        {
            sleep(1);
        }
        if(pid==0)
        {
            printf("我是子进程%d:%d,父进程%d\n",i,getpid(),getppid());
            sleep(1);
            return 0;
        }
        if(pid==-1)
        {
            ERRLOG("fork error..");
        }
    }
    return 0;                                                                           
}

运行结果


二、创建一个进程链

代码

cpp 复制代码
#include <25041head.h>

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

    for(int i=1;i<=10;i++)
    {
        pid_t pid=fork();
        if(pid>0)
        {
            wait(NULL);
            break;
        }
        if(pid==0)
        {   
            printf("子进程%d:%d,父进程%d\n",i,getpid(),getppid());
            sleep(1);
            continue;                                                        
        }
        if(pid==-1)
        {
            ERRLOG("fork error..");
        }   
    }   
    return 0;
}

运行结果


三、打印结果


四、实现文件的拷贝,父进程拷贝前一部分,子进程拷贝后一部分

代码

cpp 复制代码
#include <25041head.h>

int main(int argc, const char *argv[])
{
	int fd1=open("./my.bmp",O_RDONLY);
	int fd2=open("./new.bmp",O_RDWR | O_TRUNC | O_CREAT,0777);
	int size=(lseek(fd1,0,SEEK_END))/2;
	lseek(fd1,0,SEEK_SET);	
	char buf[128]="";
	int sum=0;
	size_t res;
	int r_size;

	pid_t pid=fork();
	if(pid>0)
	{
		while(1)
		{
			memset(buf,0,sizeof(buf));
			//判断buf的大小是否比文件的一半剩余的小,小就修改要读取的字符数
			if(size-sum<sizeof(buf)-1)
				r_size=size-sum;
			else
				r_size=sizeof(buf)-1;
			res = read(fd1, buf,r_size);
			write(fd2,buf,res);
			if(res==0)
				break;
			sum+=res;
			if(sum>size)
				break;
		}
			wait(NULL);
			return 0;
	}
	if(pid==0)
	{
		sleep(1);
		int fd2=open("./new.bmp",O_RDWR | O_CREAT | O_APPEND,0777);
		lseek(fd1,size,SEEK_SET);
		while(1)
		{
			memset(buf,0,sizeof(buf));
			res=read(fd1,buf,sizeof(buf)-1);
			if(res==0)
				break;
			if(res==-1)
			{
				ERRLOG("read error..");
			}
			if(-1==write(fd2,buf,res))
			{
				ERRLOG("write error..");
			}

		}
		if(-1==close(fd2))
		{
			ERRLOG("close error..");
		}
		printf("文件拷贝成功\n");
		exit(0);
	}


	return 0;
}

运行结果

相关推荐
程序员张326 分钟前
Maven编译和打包插件
java·spring boot·maven
ybq195133454311 小时前
Redis-主从复制-分布式系统
java·数据库·redis
Johny_Zhao2 小时前
Docker + CentOS 部署 Zookeeper 集群 + Kubernetes Operator 自动化运维方案
linux·网络安全·docker·信息安全·zookeeper·kubernetes·云计算·系统运维
weixin_472339462 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
小毛驴8502 小时前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
DKPT3 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好好学习啊天天向上3 小时前
世上最全:ubuntu 上及天河超算上源码编译llvm遇到的坑,cmake,ninja完整过程
linux·运维·ubuntu·自动性能优化
好奇的菜鸟4 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
tan180°4 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
典学长编程5 小时前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome