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

运行结果

相关推荐
y***61314 分钟前
SpringBoot集成Flowable
java·spring boot·后端
烤麻辣烫14 分钟前
黑马程序员苍穹外卖(新手)DAY6
java·开发语言·学习·spring·intellij-idea
s***385615 分钟前
SpringBoot中如何手动开启事务
java·spring boot·spring
q***61411 小时前
Spring中Aware的用法以及实现
java·数据库·spring
代码AC不AC1 小时前
【Linux】计算机的基石:从冯·诺依曼体系结构到操作系统管理
linux·操作系统·冯诺依曼体系结构
代码or搬砖1 小时前
SpringMVC的执行流程
java·spring boot·后端
大柏怎么被偷了2 小时前
【Linux】进程等待
linux·运维·服务器
Appreciate(欣赏)2 小时前
JAVA使用poi类读取xlxs文件内容拼接成添加数据SQL
java·开发语言·sql
极光代码工作室2 小时前
基于SpringBoot的流浪狗管理系统的设计与实现
java·spring boot·后端