2010-11-24 51 views
5

我想在Ubuntu 10.04中爲8.04編譯一個C程序。它失敗了,因爲我們使用了PATH_MAX以及其他在limits.h中定義的常量。根據各種資源,它應該是POSIX兼容C庫的一部分。在Ubuntu 10.04上編譯時沒有聲明PATH_MAX

這是Ubuntu 10.04中的錯誤還是有解決這個問題的正確方法?

回答

7

POSIX定義了許多這樣的限制是可選的。如果在limits.h中沒有定義限制FOO,則表示系統可能沒有此限制,或者限制可能在運行時會有所不同,或者取決於所應用的路徑名。在這些情況下,您可以使用pathconffpathconf,或sysconf功能和_PC_*_SC_*宏,如:

path_max = pathconf("/", _PC_PATH_MAX); 

或:

page_size = sysconf(_SC_PAGE_SIZE); 

不幸的是GNU(GNU C庫)定義了許多當它們在Linux上實際上是不變的時候,限制爲運行時變量,在某些情況下(我認爲這是非常錯誤的)希望有一天限制將被刪除,應用程序將立即能夠利用刪除限制。但是,對於應用程序和內核健壯性來說,只要它們足夠大(如Linux限制),實際上具有固定限制要好得多。

+2

另外,我懷疑,試圖鼓勵應用程序可移植到沒有系統定義限制的系統,例如GNU HURD。 – caf 2010-11-25 02:21:31