IPC-共享内存-进程间通信方式 网络编程基本知识

本文主要是介绍IPC-共享内存-进程间通信方式 网络编程基本知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

共享内存是一种高效的 IPC 机制,允许不同进程共享同一块内存区域。以下是共享内存相关知识点及函数的详细介绍和示例:

1. shmget()

  • 功能: 创建一个新的共享内存段或获取一个现有的共享内存段的标识符。

  • 语法: int shmget(key_t key, size_t size, int shmflg);

  • 参数:

    • key: 共享内存段的键值,通常使用 ftok() 函数生成。
    • size: 共享内存段的大小(以字节为单位)。
    • shmflg: 标志位,包含权限和创建标志。常见的标志包括 IPC_CREAT(创建新段)和 0666(读写权限)。
  • 返回值: 成功时返回共享内存标识符,失败时返回 -1。

    key_t key = ftok("shmfile",65);
    int shmid = shmget(key, 1024, 0666|IPC_CREAT);
    if (shmid == -1) {perror("shmget");exit(EXIT_FAILURE);
    }
    

    2.shmat()

  • 功能: 将共享内存段附加到调用进程的地址空间。

  • 语法: void* shmat(int shmid, const void* shmaddr, int shmflg);

  • 参数:

    • shmid: 共享内存标识符。
    • shmaddr: 内存地址。通常设置为 NULL,让系统自动选择地址。
    • shmflg: 附加标志。常见的标志包括 SHM_RDONLY(只读模式)。
  • 返回值: 成功时返回共享内存段的地址,失败时返回 (void *) -1

char *str = (char*) shmat(shmid, NULL, 0);
if (str == (char*) -1) {perror("shmat");exit(EXIT_FAILURE);
}

 

3. shmdt()

  • 功能: 将共享内存段从调用进程的地址空间分离。

  • 语法: int shmdt(const void* shmaddr);

  • 参数:

    • shmaddr: 共享内存段的地址,通常是由 shmat() 返回的地址。
  • 返回值: 成功时返回 0,失败时返回 -1。

if (shmdt(str) == -1) {perror("shmdt");exit(EXIT_FAILURE);
}

 

4. shmctl()

  • 功能: 控制共享内存段的操作,如删除、获取状态等。

  • 语法: int shmctl(int shmid, int cmd, struct shmid_ds *buf);

  • 参数:

    • shmid: 共享内存标识符。
    • cmd: 控制命令。常见的命令包括 IPC_RMID(删除共享内存段)和 IPC_STAT(获取状态)。
    • buf: 指向 shmid_ds 结构体的指针,用于获取共享内存段的状态或设定状态。
  • 返回值: 成功时返回 0,失败时返回 -1。

if (shmctl(shmid, IPC_RMID, NULL) == -1) {perror("shmctl");exit(EXIT_FAILURE);
}

 网络模型,tcp/ip

 

1. OSI 模型(开放系统互联模型)

层次结构:

  1. 物理层(Physical Layer): 负责数据在物理媒介上的传输,如电缆、电磁波等。定义了硬件设备和信号传输标准。
  2. 数据链路层(Data Link Layer): 提供数据帧的传输,负责错误检测和纠正,确保在物理层上的数据传输的可靠性。包含 MAC(介质访问控制)地址。
  3. 网络层(Network Layer): 负责数据包的路由和转发。主要协议有 IP(互联网协议),负责逻辑地址和网络路径选择。
  4. 传输层(Transport Layer): 提供端到端的通信服务,主要协议有 TCP(传输控制协议)和 UDP(用户数据报协议),负责数据流控制和错误恢复。
  5. 会话层(Session Layer): 负责建立、管理和终止会话。处理会话恢复和同步。
  6. 表示层(Presentation Layer): 处理数据格式转换、加密和解密,确保数据能够被应用层理解。
  7. 应用层(Application Layer): 直接与用户交互,提供各种网络服务和应用,如 HTTP、FTP、SMTP 等。

2. TCP/IP 模型

层次结构:

  1. 网络接口层(Network Interface Layer): 对应 OSI 模型的物理层和数据链路层,处理数据在网络介质上的传输。
  2. 网络层(Internet Layer): 对应 OSI 的网络层,主要使用 IP 协议负责数据包的路由和传输。包括 IP 地址和路由选择。
  3. 传输层(Transport Layer): 对应 OSI 的传输层,主要使用 TCP 和 UDP 协议,负责数据传输的可靠性和顺序。
  4. 应用层(Application Layer): 对应 OSI 的应用层、表示层和会话层,处理网络应用的各种服务,如 HTTP、FTP、DNS、SMTP 等。

3. 客户端-服务器模型

概念:

  • 客户端: 向服务器请求服务或资源的实体。通常是用户的计算机或设备。
  • 服务器: 提供服务或资源的实体。通常是网络上运行的程序或服务。

工作流程:

  1. 客户端发送请求到服务器。
  2. 服务器处理请求,并返回相应的数据或服务。
  3. 客户端接收响应并进行处理或显示。

应用: 常见的应用包括 Web 浏览器(客户端)和 Web 服务器,邮件客户端和邮件服务器等。

4. 点对点模型(P2P)

概念:

  • 点对点(P2P): 所有节点既可以是客户端也可以是服务器。每个节点可以同时提供和请求资源。

特点:

  • 去中心化: 不需要中央服务器,每个节点直接连接到其他节点。
  • 弹性: 系统更具弹性,节点的加入和离开不会影响整体系统的运行。
  • 应用: 文件共享(如 BitTorrent)、区块链技术等。

5. 分布式系统

概念:

  • 分布式系统: 多个计算机系统通过网络协作完成任务,提供统一的服务或资源。

特点:

  • 透明性: 用户通常不会感知到系统是由多个计算机组成的。
  • 容错性: 系统能够处理节点的故障。
  • 可扩展性: 可以通过添加更多节点来提升系统的性能或容量。

应用: 分布式数据库(如 Cassandra)、分布式文件系统(如 Hadoop HDFS)、云计算平台等。

TCP(传输控制协议):

 

连接导向:在数据传输前,TCP建立一个连接(通过三次握手)。

可靠性:保证数据按顺序到达,重传丢失的数据包。

流量控制:通过窗口机制控制数据流量,避免拥堵。

拥塞控制:检测网络拥塞,并动态调整数据传输速率。

适用场景:需要可靠性和顺序保证的应用,如网页浏览、文件传输(HTTP、FTP)。

UDP(用户数据报协议):

 

无连接:不建立连接,数据直接发送。

不可靠:不保证数据的顺序、完整性和可靠性,数据包可能丢失或重复。

低开销:开销小,适合高效的数据传输。

适用场景:实时性要求高但对可靠性要求低的应用,如视频流、在线游戏(VoIP、DNS)。

  • TCP(传输控制协议)

    • 连接导向:在数据传输前,TCP建立一个连接(通过三次握手)。
    • 可靠性:保证数据按顺序到达,重传丢失的数据包。
    • 流量控制:通过窗口机制控制数据流量,避免拥堵。
    • 拥塞控制:检测网络拥塞,并动态调整数据传输速率。
    • 适用场景:需要可靠性和顺序保证的应用,如网页浏览、文件传输(HTTP、FTP)。
  • UDP(用户数据报协议)

    • 无连接:不建立连接,数据直接发送。
    • 不可靠:不保证数据的顺序、完整性和可靠性,数据包可能丢失或重复。
    • 低开销:开销小,适合高效的数据传输。
    • 适用场景:实时性要求高但对可靠性要求低的应用,如视频流、在线游戏(VoIP、DNS)。

 

 

  • 物理层 (Layer 1)

    • 协议和标准:Ethernet(IEEE 802.3)、DSL、USB、RS-232
    • 功能:定义了数据传输的物理特性,如电缆类型、电压水平、传输速率等。物理层负责将数据以电信号、光信号或无线信号的形式传输到网络介质中。
  • 数据链路层 (Layer 2)

    • 协议:Ethernet、PPP(点对点协议)、HDLC(高级数据链路控制)、VLAN(虚拟局域网)
    • 功能:处理数据帧的传输、错误检测和纠正,确保数据在局域网内的可靠传输。它为网络层提供了物理地址的映射(如MAC地址)。
  • 网络层 (Layer 3)

    • 协议:IP(互联网协议,包括IPv4和IPv6)、ICMP(互联网控制消息协议)、IGMP(互联网组管理协议)
    • 功能:负责数据包的路由选择和转发,将数据从源地址传输到目标地址。网络层提供逻辑地址(如IP地址)来实现网络间的通信。
  • 传输层 (Layer 4)

    • 协议:TCP(传输控制协议)、UDP(用户数据报协议)
    • 功能:提供端到端的通信服务,包括数据流控制、错误检查和重传。TCP提供可靠的连接导向服务,而UDP提供无连接的、尽最大努力的传输服务。
  • 会话层 (Layer 5)

    • 协议:NetBIOS、RPC(远程过程调用)、PPTP(点对点隧道协议)
    • 功能:管理和控制会话的建立、维护和终止,确保应用程序之间的数据交换能够协调和同步。
  • 表示层 (Layer 6)

    • 协议:SSL/TLS(安全套接字层/传输层安全性)、JPEG、MPEG、ASCII
    • 功能:处理数据的表示、编码和转换,以确保不同系统之间的兼容性。它包括数据加密、解密和数据格式转换。
  • 应用层 (Layer 7)

    • 协议:HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、DNS(域名系统)
    • 功能:提供网络服务和应用程序的接口,处理用户应用程序的数据传输请求。应用层直接与用户交互,处理各种网络服务。

 

 

socket()

  • 功能:创建一个新的套接字。
  • 原型int socket(int domain, int type, int protocol);
  • 参数
    • domain:协议族(通常为AF_INET表示IPv4)。
    • type:套接字类型(SOCK_DGRAM表示UDP)。
    • protocol:协议(通常为0)

sendto()

 

功能:向指定的目标地址发送数据。

原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

参数:

sockfd:套接字描述符。

buf:要发送的数据缓冲区。

len:数据长度。

flags:通常为0。

dest_addr:指向目标地址的sockaddr结构。

addrlen:目标地址的长度。

  • 功能:关闭套接字,释放资源。
  • 原型int close(int fd);
  • 参数
    • fd:套接字描述符。

这篇关于IPC-共享内存-进程间通信方式 网络编程基本知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095529

相关文章

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

java读取excel文件为base64实现方式

《java读取excel文件为base64实现方式》文章介绍使用ApachePOI和EasyExcel处理Excel文件并转换为Base64的方法,强调EasyExcel适合大文件且内存占用低,需注意... 目录使用 Apache POI 读取 Excel 并转换为 Base64使用 EasyExcel 处

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实