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;
}

运行结果

相关推荐
看我干嘛!2 分钟前
第三次python作业
服务器·数据库·python
好好研究19 分钟前
Spring Boot - Thymeleaf模板引擎
java·spring boot·后端·thymeleaf
爬山算法21 分钟前
Hibernate(76)如何在混合持久化环境中使用Hibernate?
java·后端·hibernate
编程彩机23 分钟前
互联网大厂Java面试:从分布式缓存到消息队列的技术场景解析
java·redis·面试·kafka·消息队列·微服务架构·分布式缓存
她说..27 分钟前
策略模式+工厂模式实现单接口适配多审核节点
java·spring boot·后端·spring·简单工厂模式·策略模式
Andy Dennis29 分钟前
FTP局域网功能小网站V2_2
服务器·flask·html5
zhengfei61134 分钟前
AutoPentestX – Linux 自动化渗透测试和漏洞报告工具
linux·运维·自动化
我材不敲代码34 分钟前
在Linux系统上安装MySQL
linux·运维·服务器
坚持就完事了37 分钟前
Java的OOP
java·开发语言
像少年啦飞驰点、1 小时前
零基础入门 Spring Boot:从“Hello World”到可部署微服务的完整学习路径
java·spring boot·微服务·编程入门·后端开发