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 失敗為...