我正在將舊代碼從 Solaris 移植到 Linux。在一個檔案中,我包含:
#include <sys/siginfo.h>
當然,我在 Linux 中再也找不到它了。所以我嘗試將新的包含在:
#include <asm/siginfo.h>
但是我在嘗試編譯它時遇到了很多問題(當然)并且出現了如下錯誤:
/usr/include/asm-generic/siginfo.h:8:15: 錯誤:重新定義'union sigval'
/usr/include/asm-generic/siginfo.h:11:3: 錯誤:宣告沖突'typedef int sigval_t '
} sigval_t;
等等。所以我想,也許我可以更獨立于作業系統,并嘗試直接使用標準:
#include <signal.h>
它讓以前的錯誤消失。但我當然得到了:
錯誤:“SIGLOST”未在此范圍內宣告
但通過這種方式,我可以用一些新的宏替換它。我的問題是:將舊的 sys/siginfo.h 移植到新環境的最佳方法是什么。使用 POSIX 標準還是 asm/siginfo.h?或其他?
uj5u.com熱心網友回復:
肯定的#include <signal.h>。如果您查看linux/siginfo.h它,它會警告您不要直接包含該檔案,而是要使用它signal.h。它是 POSIX 信號的公共 API。
該手冊頁顯示,在x86 / ARM /大多數人,不使用SIGLOST。您可能正在訪問埠的一部分,這將比大多數埠花費更多的精力。您需要了解 SIGLOST 處理在您的代碼中完成的功能。特別是,如果代碼實作并需要檔案鎖定,則存在依賴于平臺的 API 和行為。在這種情況下,您可能會考慮完全重寫檔案鎖定模塊以確保行為正確。
除非你可以完全洗掉它。在花時間在這里之前,請確保您了解檔案鎖定的限制。例如,建議鎖和強制鎖的區別(后者在 Linux 上是不可靠的)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/321761.html
上一篇:為什么這個變數沒有被優化掉
