(三) 訊息佇列
1.每個佇列都有乙個msqid_ds結構與之相關聯:
struct msqid_ds;
struct ipc_perm
2.#include int msgget(key_t key, int flag);
//開啟乙個現存的佇列或建立乙個新佇列;成功返回0,出錯返回-1
3.int msgctl(int msqid, int cmd, struct msqid_ds *buf);//對訊息佇列執行多種操作
cmd 可選:
ipc_stat 取此訊息佇列的msqid_ds結構,並將它放在buf指向的結構
ipc_set:按由buf指向結構中的值,設定與此佇列相關結構中的下列四個字段:msg_perm.uid,msg_perm.gid,msg_perm.mode和msg_qbytes.此命令只有下列兩種程序才能執行(1)其有效使用者id等於msg_perm.cuid或msg_perm.uid;(2)具有超級使用者特權的程序
ipc_rmid:從系統中刪除訊息佇列以及仍在該佇列中的所有資料。
成功返回0,失敗返回-1
4.int msgsnd(int msqid, const void *ptr, size_t nbytes, int flag)//傳送訊息到訊息佇列中
成功返回0, 不成功返回-1並設定errno,錯誤碼:
eacces 對呼叫程式來說,呼叫被否定
eagain 操作會阻塞程序,但(msg*** & ipc_nowait) != 0
eidrm msqid已經從系統中刪除了
eintr 函式被訊號中斷
einval 引數msqid無效,訊息型別<1,或者msgsz越界了
flag可以指定為ipc_nowait 則不會阻塞直接返回eagain
注:引數msgp指向使用者定義的緩衝區,他是如下的結構
struct mymsg
mymsg_t
5.ssize_t msgrcv(int msqid, void *ptr, size_t nbytes, long type, int flag);//讀取訊息
成功則返回訊息的資料部分的長度,出錯則返回-1
type: type==0返回佇列中的第乙個訊息
type>0 返回佇列中訊息型別為type的第乙個訊息
type<0返回佇列中訊息型別值小於或等於type絕對值的訊息(多個取型別值最小的)
Linux網路程式設計常用函式
計算機資料儲存有兩種位元組優先順序 高位位元組優先和低位位元組優先。internet上資料以高位位元組優先順 序在網路上傳輸,所以對於在內部是以低位位元組優先方式儲存資料的機器,在internet上傳輸資料時就需 要進行轉換。我們要討論的第乙個結構型別是 struct sockaddr,該型別是用來...
Linux 網路程式設計常用函式詳解
sendto 經socket傳送資料 相關函式 send sendmsg,recv recvfrom socket 表頭檔案 include sys types.h include sys socket.h 定義函式 int sendto int s const void msg,int len,u...
windows程式設計,訊息函式中攔截訊息的問題
很多年沒有寫windows視窗程式了,今天自製基於vulkan的程式時遇到了一些問題,部分 如下 lresult callback xwindow wndproc hwnd hwnd,uint umsg,wparam wparam,lparam lparam return defwindowproc...