Linux程式設計常用的函式(三) 訊息佇列

2021-04-14 22:21:44 字數 1252 閱讀 3852

(三)   訊息佇列

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...