2010-11-24 18 views
5

पर संकलित करते समय PATH_MAX घोषित नहीं किया गया है, मैं 8.04 के लिए उबंटू 10.04 में एक सी प्रोग्राम संकलित करने की कोशिश कर रहा हूं। यह विफल रहता है क्योंकि हमने PATH_MAX और अन्य स्थिरांक का उपयोग किया है जिन्हें limits.h में परिभाषित किया जाना चाहिए। विभिन्न संसाधनों के अनुसार, यह एक POSIX संगत सी पुस्तकालय का हिस्सा होना चाहिए।Ubuntu 10.04

क्या यह उबंटू 10.04 में एक बग है या क्या इसे हल करने का कोई उचित तरीका है?

उत्तर

7

पॉज़िक्स वैकल्पिक रूप से ऐसी कई सीमाओं को परिभाषित करता है। यदि limits.h में एक फूड फू को परिभाषित नहीं किया गया है, तो इसका मतलब है कि सिस्टम में ऐसी कोई सीमा नहीं हो सकती है या सीमा रनटाइम पर भिन्न हो सकती है या जिस पथनाम पर लागू होता है उस पर निर्भर करता है। इन मामलों में, आप के रूप में pathconf, fpathconf, या sysconf कार्य करता है और _PC_* और _SC_* मैक्रो, का उपयोग करें:

path_max = pathconf("/", _PC_PATH_MAX); 

या:

page_size = sysconf(_SC_PAGE_SIZE); 

दुर्भाग्य से जीएनयू (GNU सी पुस्तकालय) कई को परिभाषित करता है रनटाइम-वैरिएबल के रूप में सीमाएं जब वे वास्तव में लिनक्स पर स्थिर होती हैं, कुछ में (मेरी राय में, बहुत गुमराह) उम्मीद है कि किसी दिन सीमा हटा दी जाएगी और एप्लिकेशन तुरंत सीमाओं को हटाने का लाभ उठा सकेंगे। हालांकि, आवेदन और कर्नेल मजबूती के लिए, जब तक वे पर्याप्त रूप से बड़े होते हैं (लिनक्स सीमाएं हैं) तब तक निश्चित सीमाएं तय करना बेहतर होता है।

+2

यह भी मुझे संदेह है कि अनुप्रयोगों को पोर्टेबल होने के लिए प्रोत्साहित करने का प्रयास है, जिनके पास सिस्टम-परिभाषित सीमा नहीं है, जैसे जीएनयू हर्ड। – caf

+0

@caf: मुझे लगता है कि आपने बिल्कुल कारण निकाला है। –