又要考试了

一、实现无名管道练习:父进程写入管道,子进程读取管道数据。

复制代码
#include<myhead.h>
int main(int argc, const char *argv[])
{
	int fd[2];
	char buff[1024]="王吕阳,崔庆权别卷了";
	char s[1024];
	if(pipe(fd)==-1)
	{
		perror("pipe");
		return -1;
	}
	pid_t pid = fork();
	if(pid==0)
	{
		close(fd[1]);//关闭写端
		while(1)
		{
			sleep(1);
			read(fd[0],s,sizeof(s));
			printf("展旗善意提醒:%s\n",s);
		}
		close(fd[0]);//关闭读端
	}else if(pid>0)
	{
		close(fd[0]);//关闭读端
		while(1)
		{
			sleep(1);
			write(fd[1],buff,sizeof(buff));
		}
		close(fd[1]);
	}else
	{
		perror("fork");
		return -1;
	}
	return 0;
}

二、有名管道练习实现一遍练习:创建2个子父进程,父进程写入管道1,子进程读取管道2,父进程写入管道2,子进程读取管道1,实现全双工通信。

复制代码
#include<myhead.h>
int main(int argc, const char *argv[])
{
	int fd1 = open("./a",O_WRONLY);
	int fd2 = open("./b",O_RDONLY);
	char arr[1024];
	char brr[1024];
	if(fd1==-1||fd2==-1)
	{
		perror("open");
		return -1;
	}
	pid_t pid = fork();
	if(pid>0)
	{
		while(1)
		{
			printf("请输入内容:");
			int res = read(0,arr,sizeof(arr));
			write(fd1,arr,res);
		}
		close(fd1);

	}else if(pid==0)
	{
		while(1)
		{
			int ress = read(fd2,brr,sizeof(brr));
			if(ress==0)
			{
				printf("退出\n");
				break;
			}
			write(1,brr,ress);
		}
		close(fd2);
	}else
	{
		perror("fork");
		return -1;
	}
	return 0;
}

#include<myhead.h>
int main(int argc, const char *argv[])
{
	int fd1 = open("./a",O_RDONLY);
	int fd2 = open("./b",O_WRONLY);
	char arr[1024];
	char brr[1024];
	if(fd1==-1||fd2==-1)
	{
		perror("open");
		return -1;
	}
	pid_t pid = fork();
	if(pid>0)
	{
		while(1)
		{
			printf("请输入内容:");
			int ress = read(0,brr,sizeof(brr));
			write(fd2,brr,ress);
		}
		close(fd2);

	}else if(pid==0)
	{
		while(1)
		{
			int res = read(fd1,arr,sizeof(arr));
			if(res==0)
			{
				printf("退出\n");
				break;
			}
			write(1,arr,res);
		}
		close(fd1);
	}else
	{
		perror("fork");
		return -1;
	}
	return 0;
}

三、进程间通信信号的默认,忽略,捕获实现一遍。

复制代码
#include<myhead.h>
void a(int b)
{
	if(b==SIGTSTP)
	{
		printf("A\n");
	}
}
int main(int argc, const char *argv[])
{
/*	if(signal(SIGINT,SIG_IGN)==SIG_ERR)
	{
		perror("signal");
		return -1;
	}

	if(signal(SIGINT,SIG_DFL)==SIG_ERR)
	{
		perror("signal");
		return -1;
	}
	*/
	if(signal(SIGTSTP,a)==SIG_ERR)
	{
		perror("signal");
		return -1;
	}
	int k=0;
	while(1)
	{
		sleep(1);
		printf("按k=%d\n",k);
		k++;
	}
	return 0;
}

四、思维导图

相关推荐
Moe48811 分钟前
WebSocket :从浏览器 API 到 Spring 握手、Handler 与前端客户端
java·后端·架构
顶点多余12 分钟前
线程互斥+线程同步+生产消费模型
java·linux·开发语言·c++
RisunJan24 分钟前
Linux命令-mount(用于挂载Linux系统外的文件)
linux·运维·服务器
⑩-26 分钟前
Java基础+集合框架-八股文
java·开发语言
取名不易28 分钟前
vue-drawer-board 简单的画图功能
前端
福运常在31 分钟前
股票数据API(19)次新股池数据
java·python·maven
Zaki_gd33 分钟前
Cortex-M7 D-Cache 与 DMA 缓存一致性说明
java·spring·缓存
多看书少吃饭35 分钟前
Vue3 + Java + Python 打造企业级大模型知识库(含 SSE 流式对话完整源码)
java·python·状态模式
Arthas21740 分钟前
Java大厂面试:从Spring到微服务的全面技术考察
java·jvm·spring·微服务·面试·并发
mifengxing40 分钟前
力扣HOT100——(1)两数之和
java·数据结构·算法·leetcode·hot100