Linux訊息佇列之命令列相關

2021-06-05 09:52:39 字數 3570 閱讀 7755

**:

訊息佇列 (也叫做報文佇列)是unix系統v版本中3種程序間通訊機制之一。另外兩種是訊號燈和共享記憶體。這些ipc機制使用共同的授權方法。只有通過系統呼叫將標誌符傳遞給核心之後,程序才能訪問這些資源。這種系統ipc物件使用的控制方法和檔案系統非常類似。使用物件的引用標誌符作為資源表中的索引。

訊息佇列就是乙個訊息的鍊錶。就是把訊息看作乙個記錄,並且這個記錄具有特定的格式以及特定的優先順序。對訊息佇列有寫許可權的程序可以按照一定的規則新增新訊息;對訊息佇列有讀許可權的程序則可以從訊息佇列中讀出訊息。

linux採用訊息佇列的方式來實現訊息傳遞。這種訊息的傳送方式是:傳送方不必等待接收方檢查它所收到的訊息就可以繼續工作下去,而接收方如果沒有收到訊息也不需等待。這種通訊機制相對簡單,但是應用程式使用起來就需要使用相對複雜的方式來應付了。新的訊息總是放在佇列的末尾,接收的時候並不總是從頭來接收,可以從中間來接收。

訊息佇列是隨核心持續的並和程序相關,只有在核心重起或者顯示刪除乙個訊息佇列時,該訊息佇列才會真正被刪除。因此系統中記錄訊息佇列的資料結構 (struct ipc_ids msg_ids)位於核心中,系統中的所有訊息佇列都可以在結構msg_ids中中找到訪問入口。

ipc識別符號:每乙個i p c目標都有乙個唯一的i p c識別符號。這裡所指的i p c目標是指乙個單獨的訊息佇列、乙個訊號量集或者乙個共享的記憶體段。系統核心使用此識別符號在系統核心中指明 i p c目標。

ipc 關鍵字:想要獲得唯一的識別符號,則必須使用乙個 i p c關鍵字。客戶端程序和伺服器端程序必須雙方都同意此關鍵字。這是建立乙個客戶機/伺服器框架的第一步。在system v ipc機制中,建立兩端聯絡的路由方法是和i p c關鍵字直接相關的。通過在應用程式中設定關鍵字值,每一次使用的關鍵字都可以是相同的。一般情況下,可以使用f t o k ( )函式為客戶端和伺服器端產生關鍵字值。

命令ipcs用於讀取system v ipc目標的狀態。

ipcs -q: 只顯示訊息佇列。

ipcs -s: 只顯示訊號量。

ipcs -m: 只顯示共享記憶體。

ipcs –help: 其他的引數。

下面是ipcs命令輸出的例子:

[root@wanglong wanglong]# ipcs

—— shared memory segments ——–

key         shmid       owner       perms       bytes       nattch      status      

0×00000000 0           root       644         40          2                       

0×00000000 32769       root       644         16384       2                       

0×00000000 65538       root       644         268         2                       

—— semaphore arrays ——–

key         semid       owner       perms       nsems     

0×000000a7 0           root       600         1         

0×00000000 98305       apache     600         1         

0×00000000 65538       apache     600         1         

0×00000000 131075      apache     600         1         

0×00000000 163844      apache     600         1         

0×00000000 196613      apache     600         1         

0×00000000 229382      apache     600         1         

0×00000000 262151      apache     600         1         

0×00000000 294920      apache     600         1         

—— message queues ——–

key         msqid       owner       perms       used-bytes    messages

核心中實現訊息傳遞機制的**基本上都在檔案ipc/msg.c中,訊息佇列的主要呼叫有下面4個,這裡只作簡單介紹:

(1)msgget:呼叫者提供乙個訊息佇列的鍵標 (用於表示個訊息佇列的唯一名字),當這個訊息佇列存在的時候, 這個訊息呼叫負責返回這個佇列的標識號;如果這個佇列不存在,就建立乙個訊息佇列,然後返回這個訊息佇列的標識號 ,主要由sys_msgget執行。

(2)msgsnd:向乙個訊息佇列傳送乙個訊息,主要由sys_msgsnd執行。

(3)msgrcv:從乙個訊息佇列中收到乙個訊息,主要由sys_msgrcv執行。

(4)msgctl:在訊息佇列上執行指定的操作。根據引數的不同和許可權的不同,可以執行檢索、刪除等的操作,主要由sys_msgctl執行。

下面的例子很好的演示了建立、傳送、讀取、改變許可權以及刪除訊息佇列各種操作:

#include

#include

#include

#include

#include

#include

#include

#define max_send_size 80

struct mymsgbuf ;

void send_message(int qid, struct mymsgbuf *qbuf, long type, char *text);

void read_message(int qid, struct mymsgbuf *qbuf, long type);

void remove_queue(int qid);

void change_queue_mode(int qid, char *mode);

void usage(void);

int main(int argc, char *argv)

switch(tolower(argv[1][0]))

void send_message(int qid, struct mymsgbuf *qbuf, long type, char *text)

}void read_message(int qid, struct mymsgbuf *qbuf, long type)

void remove_queue(int qid)

void change_queue_mode(int qid, char *mode)

void usage(void)

程式儲存為 ipcs.c

編譯:gcc -o ipcs ipcs.c

ubuntu命令列相關命令使用心得

一.ubuntu解壓縮zip,tar,tar.gz,tar.bz2 zip zip可能是目前使用得最多的文件壓縮格式。它最大的優點就是在不同的作業系統平台,比如linux,windows以及mac os,上使用。缺點就是支援的壓縮率不是很高,而tar.gz和tar.gz2在壓縮率方面做得非常好。閒話...

Vss命令列執行相關操作

1.設定vss命令列程式ss.exe的路徑 path path x microsoft visual studio common vss win32 2.設定vss資料庫的路徑 注意 set ssdir cmserver project 3.設定vss的登入使用者名稱 set ssuser your...

linux系統相關命令列

1 ctrl alt f1 f6 進行切換 ctrl alt f7 返回圖形介面 2 使用tab鍵進行 命令補全 補全目錄 補全命令引數都是可以的。當你忘記某些命令的全稱時,可以只輸入開頭的一部分,然後按下tab鍵就會補全 3 ctrl c 立即停止並恢復到你可控的狀態,強行終止當前程式 並不會使終...