又要考试了

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

复制代码
#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;
}

四、思维导图

相关推荐
珐恩AI-人工智能13 分钟前
大模型意图召回偏差分析:GEO如何解决“有收录却不触发问答曝光”的难题
大数据·前端·人工智能·html·流量运营·geo优化
城管不管15 分钟前
重生——第十次面试之开源中国一面挂
java·linux·开发语言·算法·面试·职场和发展·开源
Java小白笔记19 分钟前
Windows系统免软件命令激活
java·网络·人工智能·windows·ai·ai编程
王志来1379447300819 分钟前
从分散到集成:工控服务器机箱采购如何实现“一站式”破局
运维·服务器·人工智能·python
爱敲键盘的猴子28 分钟前
深入理解 Java HashMap
java·hashmap
霸道流氓气质28 分钟前
Java开发者AI编程常用MCP、Skills、Rules全景汇总
java·开发语言·ai编程
程序员老赵32 分钟前
Docker 部署禅道 ZenTao:轻松搭建研发项目管理平台
前端·后端·github
前端小卡拉39 分钟前
用了大半年 AI 编程工具,我才搞懂 Skill 到底是什么
前端·javascript
天涯醉青楼41 分钟前
Spring Boot 接口返回 Bean 时字段名“变形”的深度剖析与解决方案
java
hunterandroid42 分钟前
[鸿蒙从零到一] HarmonyOS 单元测试与 UI 自动化测试实战:从代码质量到用户体验的全链路保障
前端