1. msgQ很像fifo, 但是更有效率。
2. 讓兩個不相關的程序可以傳送資料。
3. 可免除同步化和擱置的問題。
sys/msg.h
sys/types.h
sys/ipc.h
int msgctl(int id, int command, struct msgid_ds *buf):
控制函數 (IPC_STAT, IPC_SET, IPC_RMID)
int msgget(key_t, int msgflg):
產生和存取 msgQ (IPC_CREAT)
int msgrcv(int id, void *msg_ptr, size_t sz, long int msgtype, int msgflg):
從 msgQ 取出訊息
int msgsnd(int id, const void*msg_ptr, size_t sz, int msgflg):
增加一個 msg 至 queue
struct msg {
long int type;
/*the data you wish to transfer*/
char data[MAX_SIZE];
}
第三個參數 sz, 是 msg_ptr 的大小, 但是不包含第一個 long int
第四個參數 msgflg 如果含 IPC_NOWAIT, 則會立即回覆
舉例來說,
如果伺服器與客戶端要溝通,雙方可以各有一個 msgQ,
而如果有很多客戶端,如果使用大量的 msgQ,可能會較浪費;
此時可以試著將第一個 type 欄位拿來記錄客戶端的 ID,
用來區別要送到哪個客戶端;
而每個客戶端也可以抓取屬於他們自己的訊息,
而不會動到其它客戶端的訊息。
0 意見:
張貼留言