7月2日作业

发布于:2025-07-03 ⋅ 阅读:(24) ⋅ 点赞:(0)

思维导图


一、创建一个进程扇 

代码

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

运行结果


二、创建一个进程链

代码

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

运行结果


三、打印结果


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

代码

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

运行结果