最近在做乙個go和php之間程序通訊的專案,想利用 共享記憶體來實現資料共享。
技術本身並不複雜,go利用cgo繫結c的shm函式,php本身就有這個擴充套件,只要編譯的時候--enable-shmop即可。
但在實際過程中發現總是沒辦法獲取到共享記憶體,後面仔細檢查了一下發現是 ftok的實現不同。
c 裡面ftok第二個引數是int, 而php裡面是字串。
最後在網上找了一段php實現 的ftok才解決問題,特此記錄下來。
function myftok($pathname, $proj_id)
$key = sprintf("%u", (($st['ino'] & 0xffff) | (($st['dev'] & 0xff) << 16) | (($proj_id & 0xff) << 24)));
return $key;
}
ftok函式的使用
1 ipcs 檢視當前系統中所有建立的ipc物件 2 ipcs q 檢視建立的訊息佇列 3 ipcs m 檢視建立的共享記憶體段 4 ipcs s 檢視建立的訊號量陣列 5 ipcrm 刪除ipc物件 例如 ipcrm q msqid 刪除標號為msqid的訊息佇列 system v提供的ipc通訊...
ftok函式用法
系統建立ipc通訊 如訊息佇列 共享記憶體時 必須指定乙個id值。通常情況下,該id值通過ftok函式得到。ftok原型如下 key t ftok char fname,int id fname就時你指定的檔名 該檔案必須是存在而且可以訪問的 id是子序號,雖然為int,但是只有8個位元被使用 0 ...
系統函式ftok
系統建立ipc通訊 如訊息佇列 共享記憶體時 必須指定乙個id值。通常情況下,該id值通過ftok函式得到。ftok原型如下 key t ftok char fname,int id fname就時你指定的檔名,id是子序號。在一般的unix實現中,是將檔案的索引節點號取出,前面加上子序號得到key...