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

思维导图

相关推荐
笑川 孙23 天前
Linux | 深入探究Linux进程控制:从fork函数到进程等待再到进程替换
linux·运维·服务器·开发语言·算法·进程
TT-Kun24 天前
Linux 进程 | 进程地址空间
linux·进程
EleganceJiaBao1 个月前
【C语言】进程和线程详解
java·c语言·jvm·c++·线程·进程
无双@1 个月前
如何理解:进程控制
linux·进程·进程状态·wait·进程控制·进程等待·waitpid
明 日 香1 个月前
IP与进程
linux·网络·进程·ip·端口号
无双@1 个月前
命令行参数&&环境变量
linux·笔记·操作系统·bash·进程·命令行·环境变量
Projectsauron1 个月前
Linux 进程调度(三)之进程的优先级
linux·进程
山顶风景独好1 个月前
操作系统中的进程:深入解析与理解
java·c++·操作系统·进程
一只小松许️2 个月前
Linux进程控制——进程等待
linux·服务器·进程