php函式ftok的坑

2021-07-26 13:10:12 字數 541 閱讀 2829

最近在做乙個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...