我正在撰寫一個 C# 應用程式,以在 Linux 中使用netlink協議(通過libnl庫)與我的無線網卡進行通信。
基本上我在模仿iw的功能。在這個初始狀態下,我想確保初始移植的呼叫結果與除錯真正的 linux 應用程式時的結果相同。
它們是 - 除了我使用nl_socket_get_fd. 除錯應用程式始終回傳值為 3 的檔案描述符,而我的 c# 應用程式外部呼叫nl_socket_get_fd始終回傳 26(即使在系統啟動后)。
我記得前一段時間我試圖做同樣的事情 - 但模仿iwlist而不是(在注意到它現在已被棄用之前)。除錯也總是回傳 3(最終呼叫libc的socket函式),而除錯我的 C# 埠總是回傳 19。
套接字的手冊頁說
socket() 創建用于通信的端點并回傳參考該端點的檔案描述符。 成功呼叫回傳的檔案描述符將是行程當前未打開的最小編號的檔案描述符。
我知道檔案描述符是“隨機”分配的,只是發現它在以這種或那種方式運行時總是回傳相同的數字很可疑。
這是需要擔心的嗎?這是否表明我移植的代碼已經沒有按預期作業,繼續前進最終會產生意想不到的結果?
uj5u.com熱心網友回復:
檔案說:
成功呼叫回傳的檔案描述符將是當前未為行程打開的編號最低的檔案描述符。
因此,如果您的行程打開了檔案描述符 0、1 和 2,但沒有打開檔案描述符 3,它將回傳 3。
如果你的行程有打開的檔案描述符 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 、22、23、24 和 25,但不是 26,它將回傳 26。
這就是 Linux 中檔案描述符的通常分配方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/328761.html
下一篇:多個行程的一個監聽套接字
