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

运行结果

相关推荐
Jelena157795857925 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库
Kina_C5 小时前
Linux iptables 防火墙原理与实操——从四表五链到 NAT 配置
linux·运维·服务器·iptables
wdfk_prog6 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
神明不懂浪漫6 小时前
【第五章】Java中的继承与多态
java·开发语言
AI多Agent协作实战派8 小时前
AI多Agent协作系统实战(十七):凌晨4点,我的AI系统在“假装工作“——3个bug同时爆炸的5小时
java·前端·bug
gaolei_eit8 小时前
Java+Ai+vue
java·spring·maven
qq_2518364578 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
LayZhangStrive8 小时前
JUC相关的函数、注解、变量杂记
java·面试·多线程·juc
未秃头的程序猿8 小时前
给公司做了个AI客服Agent,用的Spring AI 1.0,3天上线领导拍板了
java·后端·ai编程
曹牧8 小时前
Eclipse 批量文本替换
java·ide·eclipse