UNIX系统管理:系统调用-进程间高级通信

基本上所有的系统调用成功时返回0或正数,失败时返回负值。

消息通信

每个消息队列都有一个msqid_ds类型的控制结构,该结构中包括对消息队列的访问权限,其数据结构如下:

struct msqid_ds

{

struct ipc_perm msg_perm; /*操作权限结构 */

struct msg msg_first; /*指向消息队列的第一个结构*/

struct msg msg_last; /*指向消息队列的最后一个结构*/

ushort msg_cbytes; /*队列中当前字节数*/

ushort msg_qnum; /*队列中消息数*/

ushort msg_qbytes; /*队列可容纳的最大字节数*/

ushort msg_lspid; /*最后发送消息的进程号*/

ushort msg_lrpid; /*最后接收消息的进程号*/

ushort msg_stime; /*最后发送时间*/

ushort msg_rtime; /*最后接收时间*/

time_t msg_ctime; /*消息队列最后修改时间*/

};

msgget系统调用的格式

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>

int msgget(key,msgflg)

key_t key; /*消息队列关键字*/

int msgflags; /*创建标志和访问方式(类似于文件访问权限)*/

参数与功能说明:

msgflg低9位类似于文件访问权限的低9位,其他位指明消息队列的建立方式:

若指定的关键字消息队列不存在,msgflg&IPC_CREAT为真,则为他建立一个新的消息队列; msgflg&IPC_CREAT为假,返回-1。若指定的关键字消息队列存在,则返回该消息队列的描述符。

若msgflg&IPC_CREAT&IPC_EXCL为真,若指定的关键字消息队列不存在,失败返回-1;否则正常返回。

若key等于IPC_PRIVATE,则msgget调用总是成功的。

msgsnd系统调用的格式

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>

int msgsnd(msqid,msgp,msgsz,msgflg)

int msqid; /*消息队列关键字*/

struct msgbuf msgp; /指向消息缓冲的指针*/

int msgsz,msgflg; /*消息大小、发送标志*/

参数与功能说明:

发送一个消息到相关的消息队列上。其中msgp指向消息结构,他的基本格式是:

struct msgbuf

{

int mtype; /*消息类型*/

char mtext[];/*消息正文*/

}

msgflg具体含义为:

msgflg&IPC_NOWAIT为真,那么如果操作条件不满足,则出错返回-1;

msgflg&IPC_NOWAIT为假,那么如果操作条件不满足,则睡眠等待。;

msgrcv系统调用的格式

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>

int msgrcv(msqid,msgp,msgsz,msgtyp,msgflg)

int msqid; /*消息队列关键字*/

struct msgbuf msgp; /指向消息缓冲的指针*/

int msgsz,msgflg; /*消息大小、发送标志*/

long msgtyp; /*消息接收类型*/

参数与功能说明:

从消息队列中接收一个消息。其中msgp指向消息结构,他的基本格式是:

struct msgbuf

{

int mtype; /*消息类型*/

char mtext[];/*消息正文*/

}

时间: 2024-09-29 12:53:50

UNIX系统管理:系统调用-进程间高级通信的相关文章

线程及 进程间的通信问题! .

一个很好的编程随想的博客http://program-think.blogspot.com/2009/03/producer-consumer-pattern-0-overview.html 架构设计:生产者/消费者模式[0]:概述  1.如何确定数据单元2.队列缓冲区3.环形缓冲区4.双缓冲区 生产 消费 2010-06-01 10:13   #include <boost/thread/thread.hpp> #include <boost/thread/mutex.hpp>

udp-zeromq进程间的通信怎么使用?

问题描述 zeromq进程间的通信怎么使用? 我今天看了下zeromq,也用zeromq写了几个简单的例子,然后看了下它的介绍,发送支持好多通信协议,TCP.UDP.IPC 网上讲的例子都是讲TCP通信的,我想知道如果用来实现进程间的通信,这个要怎么用呢! 解决方案 client: C/C++ code #include #include #include #include int main () { void *context = zmq_init (1); // Socket to talk

由一道面试题来了解进程间的通信

    周末面试碰到一个面试题,题目是: 在MMO游戏中,服务器采用Linux操作系统,网络通信与游戏逻辑处理进程一般是分离的.例如:GameSvr进程处理游戏逻辑,TCPSvr进程处理网络通信.Linux操作系统提供了很多机制可以实现GameSvr和TCPSvr进程之间的数据通信.请您列出两种你认为最好的机制来,并为主(最好)次(次佳)描述他们实现的框架,优缺点对比和应用中的注意事项. 答案:Linux下进程通信 一.进程间通信概述进程通信有如下一些目的:A.数据传输:一个进程需要将它的数据发

window中进程间如何通信

一个间接办法,你可用一个"共享名"申请一块共享内存块,进行读写: HANDLE GetShare(char * &ShareP,int size,char *ShareName){//ShareP申请的内存块地址,size字节数,ShareName共享名HANDLE fh=CreateFileMapping((HANDLE)-1,0,PAGE_READWRITE,0,Size,ShareName);ShareP=(char *)MapViewOfFile(fh,FILE_MAP

UNIX系统管理:进程控制

完成这一章,你能够做以下事情: 使用ps命令 在后台运行进程 ,并且使用ps命令监视正在运行的进程的状态 运行一个后台进程并使其在你退出系统后不被挂起. 切换后台进程到前台运行. 挂起一个进程. 停止进程的运行. 1 ps 命令 语法: ps [-efl] 报告进程的状态 例子: $ ps PID TTY TIME COMMAND 1324 ttyp2 0:00 sh 1387 ttyp2 0:00 ps $ ps –ef UID PID PPID C STIME TTY TIME COMMAN

Linux进程间通讯-IPC详解

linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同.前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了"system V IPC",通信进程局限在单个计算机内:后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制.Linux则把两者继承了下来,如图示: 其中,最初Unix IPC包括:

Linux 基于IPC机制实现进程间的共享内存处理

今天学习了相关于IPC(InterProcess Communication ,进程间通信)的相关知识.就做个笔记,一来让大家检查一下我的理解方面是不是有错误,二来也为了能让更多的博友们了解到相关的知识吧. IPC的种类 IPC 的种类,一般来说下面两种使用的较多: - 共享"内存" - 消息传递 下来我们就分别的介绍一下相关的信息吧. 共享内存 字面意思的理解是采用共享一块计算机中的内存空间来实现的进程之间的通信的一种方式.也就是说这块内存区域驻留在生成共享内存段进程的地址空间.(是

谁知道java管道进程间怎么调用?注意是进程间!!

问题描述 谁知道java管道进程间怎么调用?注意是进程间!! 谁知道java管道进程间怎么调用?注意是进程间!!不要有c程序出现,只要java的,谢谢!!!! 解决方案 我也想知道111111 解决方案二: 进程间的通信:管道进程间的通信:管道

Android Studio创建AIDL文件并实现进程间通讯实例

在Android系统中,跨进程通信是非常普遍的事情,它用到了Binder机制处理进程之间的交互.Binder机制会开放一些接口给Java层,供android开发工程师调用进程之间通信.这些接口android封装到了AIDL文件里,当我们项目用到跨进程通信时可以创建.aidl文件,.aidl文件可以协助我们达到跨进程的通信.下面简单介绍用AndroidStudio创建AIDL文件的过程. a.新建AIDL文件 1.项目文件夹右键---> new --->选择AIDL 2.自定义一个接口名称 3.