进程通信-消息队列 函数说明

ftok

FUNCTION
系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。

进程间通信:比较脸熟的ftok()

**USAGE **

key_t ftok( char * fname, int id )

PARAMETER
@fname 文件路径名称
fname就时你指定的文件名(该文件必须是存在而且可以访问的)
@id
id是子序号,****虽然为int,但是只有8个比特被使用(0-255)

RETURN
key_t : 将文件的索引节点号取出,前面加上子序号得到key_t的返回值。如指定文件的索引节点号为65538,换算成16进制为 0x010002,而你指定的ID值为38,换算成16进制为0x26,则最后的key_t返回值为0x26010002。

NOTE
查询文件索引节点号的方法是

ls -i

ftok的第一个参数是一个文件的路径名称.一般在应用系统中,使用$HOME或者应用系统的根目录作为它的值.这样产生的key_t就不会与系统中其他的软件和系统的相同了,从而避免造成冲突. (当以文件为第一个参数时,如果文件的大小发生变化,生成的Key也会响应变化,应注意 )

shmget

???

fgets

FUNCTION

**USAGE **

PARAMETER

msgget

FUNCTION
msgget [message get] | [创建一个消息队列]

**USAGE **
int msgget(key_t key, int msgflg);

PARAMETER
@key : key ??key_t
@msgflg :message flag

msgsnd

FUNCTION
msgsnd [message sender] |消息队列发送

**USAGE **

int msgsnd(int msqid, const void *msgp, size_t msgsz,int msgflg);

PARAMETER
@msqid : message quenue id
@msgp : message pointer
@msgsz : message size
@msgflg : message flag

msgrcv

**FUNCTION **
msgrcv [message receiver] |消息队列接收

**USAGE **

int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);

PARAMETER
@msqid : message quenue id
@msgp : message pointer
@msgsz : message size
@msgtyp : message type
@msgflg : message flag

msgctl
msgctl = message control 根据cmd的不同 执行不同的指令
FUNCTION

 int msgctl(int msqid, int cmd, struct msqid_ds *buf);

@msgctl :message queue id
@cmd :command
@buf : buffer

**USAGE **
,msgctl系统调用对msqid标识的消息队列执行cmd操作列
PARAMETER
cmd

IPC_STAT
读取消息队列的数据结构msqid_ds,并将其存储在b u f指定的地址中。
IPC_SET
设置消息队列的数据结构msqid_ds中的ipc_perm元素的值。这个值取自buf参数。
IPC_RMID
从系统内核中移走消息队列。

msgctl 函数介绍

你可能感兴趣的:(进程通信-消息队列 函数说明)