2013年1月27日 星期日

System V的IPC

APUE在這方面似乎沒有給出範例,必須要到他另外一本著作去看
System V的IPC除了PIPE之外主要就是message queue, semaphore, shared memory,三者使用方式都很類似,主要是藉由identifier=>key=>id
identifier指的是一個可以產生唯一key的物件,書內有幾種使用方式,identifier大致上就是一個整數,或者由其他方式產生的整數

1. 直接寫在檔案內,所有include到的程式就可以使用到,但是有名稱衝突的問題
2. 藉由產生物件的程式指定,輸出到檔案,其他程式再去讀取
3. 寫在程式內,利用parent/child關係共享,但只能適用於fork()
4. 使用事先知道的整數跟一個路徑,再利用ftok()產生唯一的key

有了key_t key之後,用來產生物件,他會回傳物件的ID,之後就是使用ID來做操作了,大致上操作為,新增為xxxget(),修改屬性以及刪除則是xxxctl()

結論可以講在前面,作者認為除非必要,不然使用PIPE跟shared memory就可以了,message queue跟semaphore,一則效能沒有太優,又有其他問題semaphore則是沒有良好的控管,維護比較困難

接下open server框架,簡直是整本書最精華的部分了,看了好幾次才看懂他的意圖,如果不了解作者的意圖,可以參考figure 17.1,裡面牽涉到process控制、IPC、terminal,整本書大多數的技巧都用上了

沒有留言:

張貼留言