代码编织梦想

为什么需要进程间通信
1).数据传输

一个进程需要将它的数据发送给另一个进程。

2).资源共享

多个进程之间共享同样的资源。

3).通知事件

一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件。

4).进程控制

有些进程希望完全控制另一个进程的执行(如Debug进程),该控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变。

参考进程间通信

无名管道PIPE
特点:
它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。

它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。

它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

PIPE用法

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <stdlib.h>



int main()
{
	int fd[2];
	pid_t  pdata;
	char readBug[128]={0};

	if(pipe(fd)==-1){
		printf("create pipe filled!\n");
	}

	pdata=fork();
	if(pdata<0){
		printf("create fork filled!\n");
	}else if(pdata>0){
		
		sleep(2);
		printf("this is father \n");
		close(fd[0]);
		write(fd[1],"hello child",strlen("hello child"));
		wait(NULL);
	}else{
		printf("thisi is child\n");
		close(fd[1]);
		read(fd[0],readBug,128);
		printf("child:%s\n",readBug);
		exit(0);
	}

	


	return 0;
}

FIFO,也称为命名管道,它是一种文件类型。

1、特点
FIFO可以在无关的进程之间交换数据,与无名管道不同。

FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中

创建命名管道FIFO

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>


int main()
{
	if(mkfifo("./file1",0600)==-1){
		printf("create mkfifo filled!");
		if(errno==EEXIST){
			printf("mkfifo you");
		}
	}


	return 0;
}

write写端

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main()
{
	char writeBug[20]="chenhailong";
	int num=0;
	int fd;
	int data;

	fd=open("./file1",O_WRONLY);
	printf("write open succeess!\n");
	while(1){	
		data=write(fd,writeBug,strlen(writeBug));
		
		printf("write:%d:%s\n",data,writeBug);
		sleep(2);
		num++;
		if(num==5){
			break;
		}
	}
	close(fd);
	return 0;
}

read读端

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

int main()
{
	char readBug[20]={0};
	
	int fd;
	
	fd=open("./file1",O_RDONLY);
	printf("open success!\n");
	while(1){	
		int data=read(fd,readBug,20);
		printf("read:%d:%s\n",data,readBug);
	}
	close(fd);
	return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_49001476/article/details/124906032

进程间通信ipc-爱代码爱编程

一、进程间通信(IPC:Inter-Process Communication)目的: --- 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。 --- 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。 --- 通知事件:一个进程需要向另一个/一组进程发送消息,通知它们发生了

【Linux 进程间通信(IPC)详解 · 第一篇】进程间通信(IPC)基本概念-爱代码爱编程

目录&索引 致读者0 前言1 概述2 进程、线程与信息共享3 名字空间4 出错处理5 小结 致读者 刚接触该书时甚是兴奋,书中思想令人振奋,以致深夜久不能寐,但毕竟书籍年代久远,刚好博主处于学习阶段,本着探索精神,搭配 man 手册进行编码学习。献上 W. Richard Stevens 所写书籍中的一句话——"理解某种特性的实现通常

进程间通信(IPC)的几种方式-爱代码爱编程

进程间通信(IPC) 1.常见的通信方式2.低级IPC方法文件3.常用于本机的IPC机制3.1管道(无名管道)3.2FIFO(命名管道)3.3消息队列MessageQueue3.4共享存储SharedMemory3.5信号量Semaphore3.6信号Signal3.7unix域套接字4.不同计算机上的IPC机制套接字Socket 1.常见的通

Linux 进程间通信IPC概念与相关函数-爱代码爱编程

一、介绍 进程之间是相对独立的,不能直接访问彼此的资源,然而在逻辑上进程往往不是孤立的,彼此间需要进行数据交换——进程通信。进程间通信(IPC——Inter Process Communication )包括以下几种方式:(1)管道(Pipeline) 管道是Linux最初支持的IPC方式,可分为无名管道, 命名管道。在管道通信中,发送进程以字符流形式

nginx学习(一)_sleeppingforg的博客-爱代码爱编程

查看 nginx 安装目录 ps -ef | grep nginx   nigix基本结构  main  全局配置  event  配置工作模式以及连接  http  http模块相关配置     server      虚拟服务器配置 可以有多个     location   路由规则          upstream 集群,内网服务器   二

手把手教你自己搭建getwayworker聊天服务器_salestina的博客-爱代码爱编程

一:getwayWorker是什么?【仔细理解】 GatewayWorker基于Workerman开发的一个项目框架,用于快速开发TCP长连接应用,例如app推送服务端、即时IM服务端、游戏服务端、物联网、智能家居等等 GatewayWorker使用经典的Gateway和Worker进程模型。Gateway进程负责维持客户端连接,并转发客户端的数据给B

[kernel exploit] linux 内核常规堆溢出漏洞的“胜利方程式“_breezeo_o的博客-爱代码爱编程

[kernel exploit] linux 内核常规堆溢出漏洞的"胜利方程式" 文章目录 [kernel exploit] linux 内核常规堆溢出漏洞的"胜利方程式"简介背景前置条件与技术漏洞利用准备msg队列布置溢出构造msg corrupt构造 MSG UAF泄露msg 地址 1泄露msg 地址 2msg UAFDirty Pipe初始

复习一下linux常用命令,孰能生巧~_linux查看某文件夹是否有config命令-爱代码爱编程

目录 一.文件目录类 1、查看文件类型 2、列出文件/目录的命令 3、操作文件命令 4、打包、压缩命令 5、输出文件、查看文件类  二、系统操作类 1、开关机 2、显示时间类 3、网络、进程类 4、系统服务 5、防火墙 6、其他类    因为热爱所以坚持,因为热爱所以等待。熬过漫长无戏可演的日子,终于换来了人生的春天,共勉!!

【持续更新】ubuntu工具——网络工具_ubuntu安装网络工具-爱代码爱编程

​​​​​​ 目录 1、基本环境 2、SSH(Secure Shell) (1)介绍 (2)安装 1)服务端 1、基本环境 (1)Ubuntu18.04(适用Ubuntu16.04、20.04等版本) (2)Ubuntu采用root账号(若不是root账号,需要在每个命令之前添加sudo) (3)Ubuntu网络正常 2、SS