程序間通訊 IPC

2021-06-16 10:02:00 字數 1548 閱讀 7550

part2/index1.html

part2/index2.html

linux至少支援如下ipc機制:(同時支援posix和system v方式)

streams ipc機制,linux本身不支援,有乙個單獨的安裝包;可以跨pc的程序通訊;

互斥鎖或條件變數:動態初始化(不能使靜態分配),在共享記憶體中,它們還可以用於程序間的同步;

讀寫鎖:非標準

2.  fifo:

3.訊息佇列:

缺點:1)system v: msgget

返回任意指定優先順序的訊息;

不支援mq_notify機制;

2)posix(相比system v,優選posix): mq_open,mq_unlink,mq_close, mq_timedsend, mq_timedreceive, mq_getattr, mq_setattr, mq_notify

總是返回最高優先順序的訊息;

4. posix共享記憶體:

1)記憶體對映檔案方式;  open + mmap;持續性隨檔案;

2)共享記憶體區物件,即記憶體對映物件方式; shm_open + mmap;持續性隨核心;-----------------------  乙個程序修改了共享記憶體,需要通知其他程序此共享記憶體發生變化。

3)可以通過ftruncate修改共享記憶體物件的大小;

5. system v共享記憶體:

1)共享記憶體物件的大小在呼叫shmget建立時固定下來的;

同步:

1. system v sem:   ------ 核心中維護,可以用於程序或執行緒的同步;

1)檔案方式:先建立檔案,然後ftok,semget,semctl,semop

2. 互斥鎖:

3. 條件變數:

4. 讀寫鎖:pthread_rwlock_init.

5. 記錄上鎖???

6. posix訊號量:

------都可以用於程序或執行緒的同步;

1)有名訊號量:存放於檔案系統;sem_open,sem_close,sem_unlink;隨核心的;只有sem_unlink才真正刪除sem;自動分配記憶體;  ----   相對好用一些

2)基於記憶體的訊號量:存放於共享記憶體中;sem_init, sem_destory;呼叫者分配記憶體;呼叫者決定是在程序間,還是程序內使用;  --- 呼叫者分配記憶體,一般為共享記憶體的一部分。sem_init的第二個引數int shared如果為0,則為程序內線程共享;如果為1,則必須在共享記憶體,供程序訪問,用於程序間共享!

程序間通訊IPC

這兩天學習了 unix 的程序間通訊 ipc,這裡面有幾個很重要的基本概念,特別是訊息佇列和我的畢設很有關係,因此多說幾句。以前學習的程序間通訊方式,一般都是經由 fork 或exec 開啟檔案,或經過檔案系統。而 ipc是程序間通訊方式的統稱。下面一一道來。一 管道 管道是最老的 ipc形式。管道...

程序間通訊IPC

乙個大型的應用系統,往往需要眾多程序協作,程序間通訊的重要性顯而易見。首先,程序間通訊至少可以通過傳送開啟檔案來實現,不同的程序通過乙個或多個檔案來傳遞資訊,事實上,在很多應用系統裡,都使用了這種方法。但一般說來,程序間通訊 ipc interprocess communication 不包括這種似...

程序間通訊IPC

關係程序的程序間通訊 父子關係 沒有關係的程序通過訊號進行通訊 管道比共享記憶體的實時性好 linux下預設遵守posix的程序間通訊匿名管道 管道pipe 命名管道 fifo 套接字 高階ipc 不同主機間通訊 管道通訊最常見的ipc方式 int pipe int fd 2 返回 成功為0 失敗為...