2024.8.5 作业

1> 使用有名管道实现,一个进程用于给另一个进程发消息,另一个进程收到消息后,展示到终端上,并且将消息保存到文件上一份

create.c

cs 复制代码
#include <myhead.h>
int main(int argc,const char *argv[])
{
 	if(mkfifo("./linux",0644)==-1)
	{
		perror("mkfifo error");
		return -1;
	}	
	getchar();
	system("rm linux");
    return 0;
}

snd.c

cs 复制代码
#include <myhead.h>
int main(int argc,const char *argv[])
{
    int wfd = open("./linux",O_WRONLY);
    if(wfd==-1)
	{
		perror("open error");
		return -1;
	}	
	char wbuf[128]="";
	while(1)
	{
		printf("请输入>>>");
		fgets(wbuf,sizeof(wbuf),stdin);
		wbuf[strlen(wbuf)-1]=0;
		write(wfd,wbuf,strlen(wbuf));
		if(strcmp(wbuf,"quit")==0)
		{
			break;
		}
	}
	close(wfd);
    return 0;
}

recv.c

cs 复制代码
#include <myhead.h>
int main(int argc,const char *argv[])
{
 	int rfd = open("./linux",O_RDONLY);
 	if(rfd==-1)
	{
		perror("open error");
		return -1;
	}	
	int fd = open("./test.txt",O_WRONLY|O_CREAT|O_TRUNC,0644);
	if(fd==-1)
	{
		perror("open error");
		return -1;
	}
	char rbuf[128]="";
	while(1)
	{
		memset(rbuf,0,sizeof(rbuf));
		read(rfd,rbuf,sizeof(rbuf));
		if(strcmp(rbuf,"quit")==0)
		{
			break;
		}
		printf("收到的信息为:%s\n",rbuf);
		write(fd,rbuf,strlen(rbuf));
	}
	close(rfd);
	close(fd);
    return 0;
}

2> 使用有名管道实现两个进程间相互通信

create.c

cs 复制代码
#include <myhead.h>
int main(int argc,const char *argv[])
{
 	if(mkfifo("./linux1",0644)==-1)
	{
		perror("mkfifo perror");
		return -1;
	}	
	if(mkfifo("./linux2",0644)==-1)
	{
		perror("mkfifo perror");
		return -1;
	}
	getchar();
	system("rm linux1");
	system("rm linux2");
    return 0;
}

1.c

cs 复制代码
#include <myhead.h>
int main(int argc,const char *argv[])
{
 	pid_t pid = fork();
 	if(pid<0)
	{
		perror("fork error");
		return -1;
	}	
	else if(pid==0)
	{
		int rfd=-1;
		if((rfd=open("./linux2",O_RDONLY))==-1)
		{
			perror("open error");
			return -1;
		}
		char rbuf[128]="";
		while(1)
		{
			memset(rbuf,0,sizeof(rbuf));
			read(rfd,rbuf,sizeof(rbuf));
			if(strcmp(rbuf,"quit")==0)
			{
				break;
			}
			printf("收到的信息为:%s\n",rbuf);
		}
		close(rfd);
		exit(EXIT_SUCCESS);
	}
	int wfd=-1;
	if((wfd=open("./linux1",O_WRONLY))==-1)
	{
		perror("open error");
		return -1;
	}
	char wbuf[128]="";
	while(1)
	{
		printf("请输入>>>");
		fgets(wbuf,sizeof(wbuf),stdin);
		wbuf[strlen(wbuf)-1]=0;
		write(wfd,wbuf,strlen(wbuf));
		if(strcmp(wbuf,"quit")==0)
		{
			break;
		}
	}
	close(wfd);
	wait(NULL);
    return 0;
}

2.c

cs 复制代码
#include <myhead.h>
int main(int argc,const char *argv[])
{
 	pid_t pid = fork();
 	if(pid<0)
	{
		perror("fork error");
		return -1;
	}	
	else if(pid==0)
	{
		int wfd=-1;
		if((wfd=open("./linux2",O_WRONLY))==-1)
		{
			perror("open error");
			return -1;
		}
		char wbuf[128]="";
		while(1)
		{
			printf("请输入>>>");
			fgets(wbuf,sizeof(wbuf),stdin);
			wbuf[strlen(wbuf)-1]=0;
			write(wfd,wbuf,strlen(wbuf));
			if(strcmp(wbuf,"quit")==0)
			{
				break;
			}
		}
		close(wfd);
		exit(EXIT_SUCCESS);
	}
	int rfd=-1;
	if((rfd=open("./linux1",O_RDONLY))==-1)
	{
		perror("open error");
		return -1;
	}
	char rbuf[128]="";
	while(1)
	{
		memset(rbuf,0,sizeof(rbuf));
		read(rfd,rbuf,sizeof(rbuf));
		if(strcmp(rbuf,"quit")==0)
		{
			break;
		}
		printf("收到的信息为:%s\n",rbuf);
	}
	close(rfd);
	wait(NULL);
    return 0;
}

思维导图

相关推荐
HABuo2 天前
【Linux进程(一)】进程深入剖析-->进程概念&PCB的底层理解
linux·运维·服务器·c语言·c++·后端·进程
程序员龙一3 天前
进程、线程、协程通俗讲解与对比
c++·线程·进程·协程
_OP_CHEN4 天前
【Linux系统编程】(十八)Linux 进程创建与终止进阶:等待机制与程序替换的底层密码
linux·服务器·操作系统·进程·进程等待·进程替换·exec函数族
_OP_CHEN5 天前
【Linux系统编程】(十七)揭秘 Linux 进程创建与终止:从 fork 到 exit 的底层逻辑全解析
linux·运维·服务器·操作系统·shell·进程·进程创建与终止
Q741_1479 天前
Linux 进程核心解析 fork()详解 多进程的创建与回收 C++
linux·c++·面试·笔试·进程
Trouvaille ~10 天前
【Linux】理解“一切皆文件“与缓冲区机制:Linux文件系统的设计哲学
linux·运维·服务器·操作系统·进程·文件·缓冲区
Trouvaille ~10 天前
【Linux】文件描述符与重定向原理:揭开Linux文件操作的神秘面纱
linux·运维·服务器·开发语言·内核·进程·重定向
冉佳驹10 天前
Linux ——— Git的核心操作流程、进程状态及环境变量相关知识
linux·git·进程·环境变量·进程状态·fork
闲人不梦卿10 天前
进程组成和状态
进程
柏木乃一12 天前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程