PDA

View Full Version : سوال: کاربرد آرگومان های خط فرمان چیست؟



mohammad0773
چهارشنبه 10 تیر 1394, 01:07 صبح
سلام ،طاعات و عباداتتون قبول...
من در کتابی آموزشی که دارم یه فصل هست به نام "تکنیک های برنامه نویسی"،یکی از مضوعاتش آرگومان های خط فرمانه ولی در موردش خوب توضیح نداده.

int main(int argc,char *agrv[]){
//........
{

سوالم اینجاست که کلا به درد چی می خوره؟اصا کاربردش چیه؟
پیشاپیش از پاسخ هاتون ممنونم

pbm_soy
چهارشنبه 10 تیر 1394, 04:06 صبح
تا حالا تو محیط دستوری مانند داس یا ترمینالهای یونیکسی و لینوکسی دستوراتی مانند format c: /u یا label d: test را اجرا کردید؟ برنامه ای که شما مینویسید در آینده قرار است در سطح سیستم عامل اجرا شود مثل این دستوراتی که دیدید

منظورم فایلها یا برنامه هایی را اجرا کنی که جلوشون پارامتر داشته باشه مانند دستور فرمت که دوتا پارامتر c: و /u دارد حالا برنامه نویس فرمت برای اینکه بفهمه کاربر اصلا پارامتری جلوی دستور نوشته یا نه با argc میفهمه چون توش تعداد پارامترها مشخص میشه
حالا در argv هم تک تک پارامترها بصورت رشته ای قرار گرفته است در واقع آرایه ای از رشته ها است و همانطور که میدانید از صفر شروع میشود برای مثال فرمت مقادیر argv بصورت زیر میشود

argv[0]="format"
argv[1]="c:"
argv[2]="/u"


در واقع argc مخفف argument count و argv مخفف argument value است
در کامپایلرهای جدیدتر زبانهای خانواده C این مورد را بصورت تک آرگومانی هم دیدم یعنی در آن argc را حذف کردند و فقط char** argv گذاشتند
توجه داشته باشید ارسال پارامتر فقط از طریق خط فرمان نمیباشد حتی در محیطهای گرافیکی مانند ویندوز هم میتوان از این پارامترها استفاده کرد!

pbm_soy
چهارشنبه 10 تیر 1394, 04:17 صبح
مورد دیگه اینکه شما توسط تابع exit() میتوانید یک عددی را بعنوان وضعیت خاتمه برنامه به سیستم عامل برگردانید
یعنی به این ترتیب سیستم عامل میفهمد که این برنامه با چه وضعی اجراش تمام شده مثلا آیا بطور نرمال اجرا شده و پایان یافته و یا کاربر آنرا وسط کار قطع کرده و یا ......
در واقع برنامه نویس با هر عددی که داخل این تابع میگذارد یکی از حالتها را برای خودش فرض میگیرد و در آینده کاربران برنامه از آن کدها میتوانند استفاده کنند مثلا در محیطهای داس و ویندوزی با مقدار متغییر error level میتوان مقدار برگشتی یک برنامه را فهمید به عنوان مثال دستور dir /p را در cmd بنویسید بعد از خاتمه برنامه دستور echo %ERRORLEVEL% را بزنید عدد صفر را نمایش میدهد حالا دوباره دستور dir /p را بزنید این دفعه قبل خاتمه نرمال برنامه با کلیدهای Ctrl+C برنامه را وسط کار قطع کنید و خروجی ERRORLEVEL را ببینید مقدار یک باید باشد

کاربرد مقدار برگشتی به سیستم عامل بیشتر در برنامه نویسی های سطح سیستم عامل است مثلا در اسکریپتهای و یا فایلهای بچ میباشد Bat یا همان Batch files

reza_noei
چهارشنبه 10 تیر 1394, 16:23 عصر
سلام، ممنون، طاعات و عبادات شما هم مقبول حق انشا الله ...

اضافه کنم به حرف دوستمون که استفاده از آرگومان های خط فرمان مزایایی دارد که به شما در ورود فرمان ها به کامپیوتر کمک فراوانی میکند.
در گذشته که واسط های گرافیکی (GUI) ظهور پیدا نکرده بودند، برای کار با کامپیوترها میبایست همچنان از واسط های خط فرمان (CLI) برای دستور دادن به کامپیوتر استفاده
میکردید. البته امروزه هم واسط های فرمان در سیستم عامل های مدرن حضور پررنگی دارند نمونش سیستم عامل لینوکس است که از پوسته هایی نظیر bash در واسط خط فرمان خود بهره میبرد
گفته میشه که بسیاری از ویژگیهایی که ما امروز در واسطهای گرافیکی داریم از واسطهای خط فرمان الگو برداری شده اند. (مثل Shortcutها در ویندوز و لینوکس و ....) و بسیاری از ویژگیهای موجود
در خط فرمان به واسط گرافیکی راه نیافته اند.
آرگومان های خط فرمان روشی است که به کمک آن میتوانید داده های مورد نیاز برای کارکردن برنامه نظیر فایل های ورودی، فایلهای خروجی، پارامترهای برنامه و .... سریعتر به برنامه ارسال کنید به شکل
سنتی شما میتوانستید یک منو چاپ کنید و مثلا با انتخاب گزینه افزودن فایل مثلا از دستور cin برای گرفتن آدرس فایل استفاده کنید. اینهم روشی بود. اما استفاده از آرگومانهای خط فرمان اولا به سرعت کار کردن
کاربر کمک میکند (یک کاربر معمولی لینوکس روزانه بین 20 تا 100 بار از دستوراتی مثل ls استفاده میکند طبعا توقع ندارد که برای گرفتن خروجی چند تا منو ببیند و انتخاب کند زیرا سرعت کارکردش چند برابر کند میشود)
دوما استفاده از آرگومان های خط فرمان به شما اجازه میدهد که دستورات را به صورت ترکیبی هم استفاده کنید (pipeline) به دستور زیر توجه کنید :
ls -al | sort | uniq -q > file1.txt
دستور بالا فهرستی از محتویات دایرکتوری جاری تولید میکند و سپس آن را بعنوان ورودی به برنامه sort میدهد و این برنامه خطوط فایل ورودی را مرتب میکند و سپس آنرا به برنامه uniq میدهد که این برنامه خطوط تکراری فایل ورودی را حذف میکند (البته در دستور بالا کارکرد سوری دارد) و سپس نتیجه را در فایلی به نام file1.txt ذخیره میکند. به نظر سرعت کار فوق العاده سریعتر شده ! اینطور نیست ؟ حتی در مقایسه با واسط گرافیکی !

البته ساز و کارهای آرگومان های خط فرمان در پس واسطهای گرافیکی هم نهفته اند تابحال شده که چند ترک آهنگ را انتخاب کنید و سپس اجرا کنید ؟ این اجرا شکلی مثل دستور زیر دارد (در خط فرمان پنهانی gui) :

vlc "track1.mp3" "track2.mp3" "track3.mp3" , ....
یا
vlc "Playlist1.xspf"

در غیر اینطور شما میبایست برنامه vlc را باز میکردید و این فایل ها را یکی یکی اضافه میکردید که واضح است که بسیار کند تر عمل میکرد.

نحوه استفاده از آرگومان های خط فرمان را هم دوستمان در بالا توضیح دادند اگر سوالی داشتید اعلام کنید.

یاعلی