日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

window linux IPC ftok BY_HANDLE_FILE_INFORMATION

發布時間:2023/12/13 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 window linux IPC ftok BY_HANDLE_FILE_INFORMATION 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看這題目就很亂,心情當然也是不怎么美好了。前一段時間做了一個項目,AIX(Unix的一種)中的一個系統向WINDOWS移植,開發環境由IBM的C/C++(叫什么忘記了,好像是xlC)變為VC++。

這是算過來,但是最近進程通信的信號量出了問題(也不算什么問題,就是全局信號量的名字應該怎么命名有點問題了。)

AIX系統中,信號量的名字其實是key_s(本質就是int),key_s是通過ftok返回了。大概的邏輯就是指定一個系統中存在的文件,取文件的索引節點號的低24位,然后高8位使用偏移字段,

這樣,同一個系統文件可以最多生成256個信號量名稱。

但是WINDOWS這邊沒有,WINDOWS這么只需要指定一個字符串就可以了。但是字符串前綴可以是Golbal, Local, 無,三種情況,由于區分信號量是全局,本地,默認(本地)的。

然后我就使用文件名稱(沒有帶路徑)生成了一個信號量的名字,因為當時真的沒有找到WINDOWS的文件索引節點號(壓根沒有這個概念,好吧我承認是被度娘騙的分文不剩)。

后來我領導這日本雅虎上確實找到了WINDOWS這邊與之對應的概念,就是BY_HANDLE_FILE_INFORMATION,其實AIX存文件的時候,是使用設備號+文件號來存儲的,而WINDOWS是

采用設備號+文件號高位+文件號地位來存儲的,應該算的上是一種對應關系。(在WINDOWS這邊也有IPC,但是里面的設備號和文件號都是0)

typedef struct _BY_HANDLE_FILE_INFORMATION {DWORD ???dwFileAttributes;FILETIME ftCreationTime;FILETIME ftLastAccessTime;FILETIME ftLastWriteTime;DWORD ???dwVolumeSerialNumber;DWORD ???nFileSizeHigh;DWORD ???nFileSizeLow;DWORD ???nNumberOfLinks;DWORD ???nFileIndexHigh;DWORD ???nFileIndexLow; } BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION;

加粗的就是定義了。使用這個就是可以通過3個DWORD(也可以理解是一種int)就可以唯一標識一個文件了。如果文件不存在,就是-1(在內存中是0xffffffff)。
而后需要解釋的就是WINDOWS中的信號名稱最好是“xxxx-xxxxxxxx-xxxxxxxxxxxxxxxx”(偏移-設備號-文件號)這種形式。 _BY_HANDLE_FILE_INFORMATION 的獲取方式:
---- get fi ----
HANDLE h = INVALID_HANDLE_VALUE;
BY_HANDLE_FILE_INFORMATION fi;
h = CreateFile(path, 0, 0, NULL, OPEN_EXISTING, 0, NULL);
GetFileInformationByHandle(h, &fi);
---- get fi ----

轉載于:https://www.cnblogs.com/ys0103/p/4991310.html

總結

以上是生活随笔為你收集整理的window linux IPC ftok BY_HANDLE_FILE_INFORMATION的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。