আসল সর্বাধিক আর্গুমেন্ট তালিকার দৈর্ঘ্য সন্ধান করার একটি সাধারণ উপায় কী?


9

এআরজি_এমএক্স অনুসরণ করে, একটি নতুন প্রক্রিয়াটির জন্য সর্বাধিক আর্গুমেন্টগুলি মনে হচ্ছে ARG_MAXআমার ম্যাক মিনি 3,1 চলমান উবুন্টু 12.04 এ ভুলভাবে (বা কমপক্ষে অস্পষ্টভাবে) সংজ্ঞায়িত হয়েছে:

$ getconf ARG_MAX # arguments 
2097152
$ locate limits.h | xargs grep -ho 'ARG_MAX[ \t]\+[0-9]\+' | uniq | cut -d ' ' -f 8
131072

প্রকৃত সীমা এইগুলির মধ্যে কোথাও রয়েছে বলে মনে হচ্ছে:

$ cd "$(mktemp -d)"
$ touch $(seq 1 131072) && find . -mindepth 1 -printf x | wc -c && rm *
131072
$ touch $(seq 1 131073) && find . -mindepth 1 -printf x | wc -c && rm *
131073
$ touch $(seq 1 $(getconf ARG_MAX)) && find . -mindepth 1 -printf x | wc -c && rm *
bash: /usr/bin/touch: Argument list too long

আমি একটি ছোট অনুসন্ধান করেছি:

cd "$(mktemp -d)"
min=131072
max=2097152
while true
do
    search=$((min + (max - min) / 2))
    if touch $(seq 1 $search) 2>/dev/null
    then
        min=$search
    else
        max=$search
    fi
    [[ $((max - min)) -le 1 ]] && echo "ARG_MAX = $min" && break
done

অবশেষে এর ফলস্বরূপ ARG_MAX = 314290, এর ARG_MAXআগে পাওয়া মানের কোনওটির সাথে কোনও সম্পর্ক নেই বলে মনে হয় । এটা কি স্বাভাবিক? আসলটি খুঁজে পাওয়ার সহজ উপায় কি আছে ARG_MAX?

আমি কি ARG_MAX এর সংজ্ঞাটি ভুল বুঝেছি? দেখে মনে হচ্ছে এটি পৃথক স্পেসগুলি (বা) ছাড়াই আর্গুমেন্টগুলির বাইট (বা সম্ভবত চরিত্রের) দৈর্ঘ্য length যদি এটি সত্যিই বাইট দৈর্ঘ্য হয়, অন্য নিষেধাজ্ঞাগুলিও কি আছে ?

উত্তর:


7

হ্যাঁ, এটি পরিবেশ সহ বাইটের দৈর্ঘ্য।

খুব মোটামুটি:

$ { seq 1 314290; env; } | wc -c
2091391

লিনাক্স সিসকনফ

নির্বাহের (3) ফাংশনের পরিবারের কাছে যুক্তির সর্বাধিক দৈর্ঘ্য। _POSIX_ARG_MAX (4096) এর চেয়ে কম হওয়া উচিত নয়।

পোজিক 2004 সীমাবদ্ধতা

পরিবেশের ডেটা সহ এক্সিকিউট ফাংশনগুলিতে সর্বাধিক যুক্তির দৈর্ঘ্য। ন্যূনতম গ্রহণযোগ্য মান: _P _POSIX_ARG_MAX}


3

আপনি যে পৃষ্ঠার সাথে লিঙ্ক করেছেন সেই পৃষ্ঠায় ARG_MAXবলা হয়েছে যে কার্নেল সংস্করণ ২.6.২৩ অনুসারে এটি স্ট্যাকের আকার ১ / চতুর্থ। এটি গিটকে দায়বদ্ধ করার সাথে লিঙ্ক দেয় ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.