2008-09-05 2 views
7

फेडोरा कोर 7 पर, मैं कुछ कोड है कि ARG_MAX पर निर्भर करता है लिख रहा हूँ। हालांकि, भले ही मैं #include <limits.h>, स्थिर अभी भी परिभाषित नहीं है। मेरी जांच से पता चलता है कि यह <sys/linux/limits.h> में मौजूद है, लेकिन यह Win32/Mac/Linux में पोर्टेबल माना जाता है, इसलिए सीधे इसमें यह विकल्प नहीं है। यहाँ क्या चल रहा है?ARG_MAX को सीमा.h के माध्यम से परिभाषित क्यों नहीं किया गया है?

उत्तर

8

कारण यह सीमा में नहीं है। यह है कि यह वर्तमान आर्किटेक्चर पर बिट चौड़ाई के आधार पर एक अभिन्न प्रकार की मान सीमा की सीमा प्रदान करने वाली मात्रा नहीं है। आईएसओ मानक द्वारा सीमा.h को असाइन की गई भूमिका है।

जिस मूल्य में आप रुचि रखते हैं वह हार्डवेयर में बाध्य नहीं है और प्लेटफ़ॉर्म से प्लेटफार्म और सिस्टम सिस्टम निर्माण के लिए सिस्टम निर्माण में भिन्न हो सकता है।

सही करने के लिए sysconf पर कॉल करना और इसे "ARG_MAX" या "_POSIX_ARG_MAX" के लिए पूछना है। मैं सोचता हूं जो कि पॉज़िक्स-अनुरूप समाधान है वैसे भी।

एसीसी। मेरे प्रलेखन में, आप एक या दोनों unistd.h या limit.h शामिल हैं, जो आप अनुरोध कर रहे हैं।

एक अन्य बिंदु: फ़ंक्शन के निष्पादन परिवार के कई कार्यान्वयन E2BIG या समान मूल्य लौटाते हैं यदि आप उन्हें एक बड़े वातावरण के साथ कॉल करने का प्रयास करते हैं। यह परिभाषित स्थितियों में से एक है जिसके अंतर्गत निष्पादन वास्तव में वापस आ सकता है।

-2

ARG_MAX /usr/include/linux/limits.h में परिभाषित किया गया है। मेरा लिनक्स कर्नेल संस्करण 3.2.0-38 है।

संबंधित मुद्दे