进程间通信 -- 13




1 2

200x200


问题 -- 如何在进程间共享互斥量一般的,我们使用互斥量用来做线程同步与资源锁定,让一个资源同时只能有一个线程可以访问,那么,如何让互斥量在多个进程间共享呢?将互斥量创建在共享内存

#技术帖    #进程间通信    #技术分享    #fork   

200x200


信号量信号量与其他的 IPC (管道、FIFO、消息队列、域套接字)都有所不同,他是一个计数器,用于多进程对共享数据对象的访问当进程需要获得共享资源时,需要进行下列操作: 

#读书笔记    #技术帖    #linux    #unix   
消息队列此前已经介绍了 XSI PIC 的基本概念和一些用法XSI IPC 简介  这里我们介绍一下 XSI IPC 中的消息队列消息队列简称队列,其标识符被称为队列 ID(queue ID) 消息被添加到队列尾端,包含一个正长整型类型字段,一个非负长度以及实际数据字节消息队列并不一定要以先进先出次序取消息,也可以按照消息的类型字段取消息 消息队列结构 -- msqid_dsstruct msqid_ds { struct ipc_perm msg_perm; // ipc 权限结构 msgqnum_t msg_qnum; // 队列中的数据数 msglen_t msg_qbytes; // 队列的最大字节容量 pid_t msg_lspid; // 最近插入队列数据的进程 ID pid_t msg_lrpid; // 最近取出数据的进程 ID time_t msg_stime; // 最近入队时间 time_t msg_rtime; // 最近出队时间 time_t msg_ctime; // 最近更新时间 ... ... }  该结构描述了队列的当前状态,各系统的具体实现会包含额外的字段
#读书笔记    #技术帖    #龙潭书斋    #apue   
概述有三种 IPC 被称为“XSI IPC”:消息队列信号量共享内存 他们之间有很多相似之处 标识符和键每个内核中的 IPC 结构(消息队列、信号量、共享内存)都用一个非负整数的标识符加以引用与文件描述符不同,IPC 标识符不是小的整数,当一个 IPC 结构被创建,与该结构相关的标识符连续加 1,直到达到整型最大数值,然后再从 0 开始加 由于标识符的数字难以使用和记忆,因此标识符仅被作为 IPC 对象的内部名,而“键”则是 IPC 对象的外部名供程序使用,键是 key_t 类型的数据,定义于 sys/type.h 中,通常为长整型外部调用使用键,由内核转化为标识符 但是,当客户进程与服务端进程通信的过程中,怎么保证“键”与标识符及 IPC 结构在服务端进程与客户进程之间会合呢?主要有下列方法:服务器进程可以指定键 IPC_PRIVATE 创建一个新的 IPC 结构(键 IPC_PRIVATE 保证服务器进程创建的 IPC 结构是一个新的结构),将返回的标识
#读书笔记    #技术帖    #龙潭书斋    #套接字   

200x200


概述FIFO 有时被称为“命名管道”管道只能由相关进程使用,这些相关进程必须有共同的祖先进程,但通过 FIFO,即便是不相关的进程也可以相互通信FIFO 的创建函数原型i

#读书笔记    #技术帖    #unp    #unix网络编程   

200x200


概述管道是 UNIX 系统 IPC 的最古老形式,所有的 UNIX 系统都支持这种通信机制,所以也是最常用的 IPC 形

#读书笔记    #技术帖    #linux    #unix   

200x200


最简单的进程之间传递信息的方式是通过 fork 或 exec 传送已打开的文件,或两进程通过打开相同的文件来进行数据的共享进程之间通信还有其他技术 -

#读书笔记    #技术帖    #linux    #unix   

200x200


简介STREAMS 就是流流在用户进程和设备驱动程序之间提供了一条全双工通道,从而无需和实际的硬件设备直接会话,也因此,流可以用来构造伪设备驱动程序任意数量的处理模块可以被压入流,流类似于栈

#读书笔记    #linux    #unix    #龙潭书斋   
描述符传递进程间通信的另一种方式是直接使用已经打开的描述符,比如 socket 描述符,这样一个进程在这个描述符上写数据,一个进程在这个描述符上读数据,即可实现通信下面的方法可以传递已打开的描述符:fork 返回后,子进程与父进程共享所有已打开的描述符,同时,exec 执行后,一般已打开的描述符状态仍然会保持不变但是限制在于必须是父子进程间通信并且只能由父进程传递给子进程下面即将介绍的 socketpair 函数则没有这样的限制socketpair 函数int socketpair (int family, int type, int protocol, int sockfd[2]); 定义于 sys/socket.h调用成功返回非 0 的连接描述符,出错返回 -1 family 参数必须为 AF_LOCALprotocol 参数必须为 0type 参数可以选择 SOCK_STREAM 或 DGRAM_STREAM新创建的两个套接字描述符作为 sockfd[0] 和 sockfd[1] 返回type 为 SOCK_S
#读书笔记    #技术帖    #linux    #unix   
概述unix 域协议并不是一个实际的协议族,而是在单个主机上执行 C/S 通信的一种方式,是进程间通信的方法之一unix 域协议提供两类套接字:字节流套接字和数据报套接字,分别类似于 TCP 和 UDP,他所使用的 API 几乎等同于网络 C/S 通信所使用的 API优势与其他 IPC 方法相比,unix 域协议有以下优势:与两端位于同一个主机的 TCP 套接字相比,速度快一倍可以在同一主机的不同进程间传递描述符域套接字会将客户凭证(用户ID和组ID)提供给服务器,从而可以提供额外的安全措施unix 域套接字地址结构struct sockaddr_un { sa_family_t sun_family; /* AF_LOCAL */ char sun_path[140]; /* null-terminated pathname */ } 定义于 sys/un.h存放在sun_path数组中的路径名必须以空字符结尾,如果 sun_path 是一个空字符串,则等价于 IPv4 的 INADDR_ANY 或&n
#读书笔记    #技术帖    #linux    #unix   
1 2



京ICP备15018585号