Linux进程间通信——消息独队列进程通信

一.ftok函数

key_t ftok( char * fname, int id )
//系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。
参数:
fname就时你指定的文件名(该文件必须是存在而且可以访问的)
id是子序号, 虽然为int,但是只有8个比特被使用(0‐255)。


返回值:
当成功执行的时候,一个key_t值将会被返回,否则 ‐1 被返回。

二.消息队列进程间半双工通信
 

写一个msg_write用来写,一个msg_read用来读,这两个之间通信需要用一个id,就需要上面所说的ftok函数获取

ftok()函数里的第一个参数可以随便写一个,第二个参数0~255写一个

msgid就用msgget()函数获取,IPC_CREAT|0755是用于如果没有建立相对应消息队列时创建一个

msg_write

msg_read

三.消息队列进程间全双工通信

全双工通信通过父子进程实现,建立一个服务端(write),一个客户端(read)

在服务端文件中生成消息队列只有用fork函数生成父子进程

服务端时父进程写,子进程读

父进程写100类型的消息,子进程读200类型的消息

客户端与服务端相反过来,父进程读,子进程写

子进程写200类型的消息,父进程读100类型的消息

之后就可以进行全双工通信了,都可以收发消息,就相当于两个qq之间的对话