UNIX網路程式設計卷二 筆記 Posix訊息佇列

2021-06-17 18:27:16 字數 1655 閱讀 8715

每個訊息都是乙個有優先順序的記錄,程序寫入訊息前,不需要有其它程序在等待訊息。訊息佇列具有隨核心的持續性。

posix

訊息佇列與

system v

訊息佇列的兩個主要區別:

1.posix

讀返回最高優先順序的最早訊息,

system v

返回指定優先順序的最早訊息。

2.向空佇列放置乙個訊息時,

posix

可以產生乙個訊號或啟動乙個執行緒。

mq_open

:開啟或建立訊息佇列,除了可選的

attr

引數外,與

open

類似。mq_close

:關閉訊息佇列,與

close

類似。mq_unlink

:帶引用計數的刪除,與

unlink

類似。mq_getattr

和mq_setattr

函式:獲取和設定訊息佇列的屬性。

struct mq_attr

int mq_send(mqd_t mqdes, const char *ptr, size_t len, unsigned int prio); 

ssize_t mq_receive(mqd_t mqdes, const char *ptr, size_t len, unsigned int *priop);

mq_receive

的len

引數不能小於訊息佇列的

mq_msgsize

的大小。

posix

允許長度為

0的訊息,但不具備有效標識訊息傳送者的特性。

1.mq_maxmsg

最大訊息數。

2.mq_msgsize

最大訊息長度。

3.mq_open_max

同時開啟的訊息佇列的最大數目。

4.mq_prio_max

優先順序的最多級數。

mq_notify

提供了非同步事件通知功能,在某個空訊息佇列被放置一條訊息時,會向註冊的程序傳送指定訊號或啟動乙個執行緒。

int mq_notify(mqd_t mqdes, const struct sigevent *notification);

1.乙個佇列在任意時刻只有乙個程序能夠註冊這個通知。

2.只有當前註冊通知的程序可以撤銷這個註冊,方法是傳入乙個空指標。3.因

mq_receive

而阻塞的程序比註冊了通知的程序優先獲得訊息。

4.通知被傳送到註冊程序後,該註冊被撤銷。

posix

實時訊號指值在

sigrtmin

和sigrtmax

之間的一系列訊號,在

sigaction

呼叫中指定

sa_siginfo

標誌的話,實時訊號能提供一些***的、可靠的實時行為。

實時行為隱含特性:

1.訊號是排隊的,阻塞期間同一訊號產生多次,那麼解除阻塞後該訊號會遞交多次。

2.多個實時訊號排隊時,值較小的訊號優先遞交。

3.實時訊號能攜帶更多資訊。

4.有使用實時訊號工作的新函式。

UNIX網路程式設計卷二 筆記 讀寫鎖和記錄上鎖

讀寫鎖用於讀取資料比修改資料更頻繁的場景,它的分配規則如下 1.沒有執行緒持有寫鎖時,任意多的執行緒可以持有讀鎖。2.僅當沒有執行緒持有讀鎖或寫鎖時,才能分配寫鎖。當已有執行緒持有讀鎖時,另一線程申請寫鎖則會阻塞,若後續還有讀鎖的申請,此時有兩種策略 1.對後續的讀鎖請求都通過,可能會造成因讀鎖不斷...

《UNIX網路程式設計 卷2》 筆記 管道

管道是最初的unix ipc形式,它的侷限性在於沒有名字,只能在有親緣關係的程序間使用。後來,fifo出現了,fifo也稱為有名管道。管道和fifo都使用read和write函式訪問。include int pipe int fd 2 管道由pipe函式建立,返回兩個描述符 fd 0 用來讀,fd ...

《UNIX網路程式設計 卷1》 筆記 UNIX域協議

unix域協議並不是乙個實際的協議族,而是在單個主機上客戶程序和伺服器程序之間通訊的一種方法。unix域使用的套接字結構如下 struct sockaddr un int main int argc,char argv 執行結果如下 可以看到繫結的路徑名 tmp 123 現在是乙個套接字檔案。uni...