5
我想在Ubuntu 10.04中爲8.04編譯一個C程序。它失敗了,因爲我們使用了PATH_MAX
以及其他在limits.h
中定義的常量。根據各種資源,它應該是POSIX兼容C庫的一部分。在Ubuntu 10.04上編譯時沒有聲明PATH_MAX
這是Ubuntu 10.04中的錯誤還是有解決這個問題的正確方法?
我想在Ubuntu 10.04中爲8.04編譯一個C程序。它失敗了,因爲我們使用了PATH_MAX
以及其他在limits.h
中定義的常量。根據各種資源,它應該是POSIX兼容C庫的一部分。在Ubuntu 10.04上編譯時沒有聲明PATH_MAX
這是Ubuntu 10.04中的錯誤還是有解決這個問題的正確方法?
POSIX定義了許多這樣的限制是可選的。如果在limits.h
中沒有定義限制FOO,則表示系統可能沒有此限制,或者限制可能在運行時會有所不同,或者取決於所應用的路徑名。在這些情況下,您可以使用pathconf
,fpathconf
,或sysconf
功能和_PC_*
和_SC_*
宏,如:
path_max = pathconf("/", _PC_PATH_MAX);
或:
page_size = sysconf(_SC_PAGE_SIZE);
不幸的是GNU(GNU C庫)定義了許多當它們在Linux上實際上是不變的時候,限制爲運行時變量,在某些情況下(我認爲這是非常錯誤的)希望有一天限制將被刪除,應用程序將立即能夠利用刪除限制。但是,對於應用程序和內核健壯性來說,只要它們足夠大(如Linux限制),實際上具有固定限制要好得多。
另外,我懷疑,試圖鼓勵應用程序可移植到沒有系統定義限制的系統,例如GNU HURD。 – caf 2010-11-25 02:21:31