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

思维导图

相关推荐
清水加冰6 天前
【Linux进程】进程间的通信
linux·进程
ktkiko118 天前
线性池学习
jvm·线程·线程池·进程
--Ekko--9 天前
嵌入式入门Day32
c语言·进程
羑悻的小杀马特19 天前
Linux命令行解释器的模拟实现
linux·运维·进程·环境变量
学习编程之路20 天前
【Linux】深入理解进程管理与fork系统调用的实现原理
linux·运维·服务器·运维开发·进程
小猴zhi永不言弃24 天前
用到动态库的程序运行过程
linux·进程·动态库
菜鸟挣扎史1 个月前
grafana+prometheus+windows_exporter实现windows进程资源占用的监控
windows·grafana·prometheus·进程·process
WZF-Sang2 个月前
Linux—进程学习-01
linux·服务器·数据库·学习·操作系统·vim·进程
yang_shengy2 个月前
【JavaEE】认识进程
java·开发语言·java-ee·进程
邂逅岁月2 个月前
【多线程奇妙屋】 Java 的 Thread类必会小技巧,教你如何用多种方式快速创建线程,学并发编程必备(实践篇)
java·开发语言·操作系统·线程·进程·并发编程·javaee