سؤال

في Fedora Core 7، أكتب بعض التعليمات البرمجية التي تعتمد عليها ARG_MAX.ومع ذلك، حتى لو كنت #include <limits.h>, ، الثابت لا يزال غير محدد.تحقيقاتي تظهر أنه موجود في <sys/linux/limits.h>, ، ولكن من المفترض أن يكون هذا محمولاً عبر Win32/Mac/Linux، لذا فإن تضمينه مباشرة ليس خيارًا.ما الذي يحدث هنا؟

هل كانت مفيدة؟

المحلول

السبب في أنها ليست في Limits.h هو أنها ليست كمية تعطي حدود نطاق القيمة لنوع متكامل يعتمد على عرض البت في البنية الحالية.هذا هو الدور المخصص لـ Limits.h وفقًا لمعيار ISO.

القيمة التي تهتم بها ليست مرتبطة بالأجهزة في الممارسة العملية ويمكن أن تختلف من نظام أساسي إلى آخر وربما من نظام إلى آخر.

الشيء الصحيح الذي يجب فعله هو الاتصال sysconf واطلب منه "ARG_MAX" أو "_POSIX_ARG_MAX".أنا يفكر هذا هو الحل المتوافق مع POSIX على أي حال.

لجنة التنسيق الإدارية.في وثائقي، يمكنك تضمين واحد أو كليهما من unistd.h أو Limits.h بناءً على القيم التي تطلبها.

نقطة أخرى:العديد من تطبيقات مجموعة وظائف exec تُرجع E2BIG أو قيمة مشابهة إذا حاولت الاتصال بها في بيئة كبيرة الحجم.يعد هذا أحد الشروط المحددة التي بموجبها يمكن لـ exec العودة فعليًا.

نصائح أخرى

تم تعريف ARG_MAX في /usr/include/linux/limits.h.إصدار Linux kernel الخاص بي هو 3.2.0-38.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top