PDA

View Full Version : محتويات يه فايل تکست



hamid67fathi
شنبه 09 شهریور 1387, 16:39 عصر
سلام
چه جوری مشه محتويات يه فايل تکست رو چاپ کرد ؟؟
اگه ميشه کده کاملشو بديد که کارم گيره

bsng110
شنبه 09 شهریور 1387, 18:03 عصر
هوالحکیم.
سلام.
من کار کردن با پرینتر را در ++C بلد نیستم و اگه اشتباه نکنم مجبوری از API ها و ... استفاده کنی و بعید می دونم کتابخانه ای برای اون وجود داشته باشه ولی اگه فایلت فقط متنی است و می خواهی بدون هیچ فرمت بندی خاصی آن را چاپ کنی، می توانی از دستورات ویندوز استفاده کنی. به گزینه run پنجره start menu مراجعه کن و تایپ کن cmd. بعد در اون پنجره مشکی ظاهر شده، بنویس ?/ print تا توضیحات کافی اجرای این دستور را ببینی. حالا می تونی با استفاده از تابع system که در فایل سرآمد stdlib.h قرار دارد، این دستور را اجرا کنی.
برای اجرا این دستور باید رشته خودت را که با توجه به دستور print محیط command line تنظیم کرده ای، به این تابع ارسال کنی. مثلاً رشته "print "c:\\myfile.txt را به تابع system ارسال می کنی.
اگه دوست داشتی، در زیر من توضیحات یک سری از دستورات Command Line ویندوز را گفته ام و توابعی نیز برای اجرای فایل های exe و دستورات command line در ++C معرفی کرده ام که می توانی آنها را نیز برای مطالعه بیشتر، نگاه کنی.
یا علی
حق نگهدارت

bsng110
شنبه 09 شهریور 1387, 18:03 عصر
به نقل از http://enghelper.com/forum/viewtopic.php?t=89:

آشنایی با محیط Command Line :


شاید از خود بپرسید این چه ربطی به برنامه نویسی و طراحی الگوریتم ها دارد ؟ به زودی پاسخ شما را در قسمت "مطالبی از ++C که هرگز گفته نشد" خواهم داد .
در محیط Command Line برای اجرای یک دستور باید آن را تایپ کرده و پس از آن کلید Enter را فشار دهیم . دستورات این محیط می توانند یک یا چند جمله، شامل یک یا چند پارامتر باشند .
نحوه وارد شدن به محیط Command Line : برای این منظور در محیط سیستم عامل Windows دو راه ممکن می باشد .
روش اول : از نوار وضیفه ( Task Bar – نوار پایین Windows ) کلید Start را فشار داده و گزینه Run را انتخاب می کنیم . در پنجره ظاهر شده عبارت cmd ( مخفف Command Line) را تایپ کرده و سپس کلید Enter را فشار می دهیم .
روش دوم : در قسمت مذکور پس از کلید بر روی Start بسته به سیستم عامل دو راه ممکن است :
الف) سیستم عامل Windows 98-Me : در قسمت Programs یا All programs گزینه Ms Dos ( یا عبارتی شبیه به این ) را انتخاب می کنیم . ( به دلیل عدم دسترسی به این دو سیستم عامل از ذکر دقیق عبارات معذورم )
ب) سیستم عامل Windows XP : در قسمت Programs یا All programs در منوی Accessories (لوازمات) گزینه Command Prompt را انتخاب می کنیم . پ) البته روش های دیگری نیز برای ورود به Command Line وجود دارد . مثلاً هنگامی که از دیسک Boot استفاده می کنیم، وارد محیطی Command Line مربوط به ویندوز 98 می شویم . دقت کنید که محیط Command Line بسیاری از دستورات DOS را پشتیبانی نمی کند چرا که فایل های مربوط به آن را دارا نمی باشد و همچنی بعضی از محدودیت های سیستم عامل Dos را نیز دارا نمی باشند، مثلاً در سیستم عامل Dos نام یک فایل نمی تواند بیش از 8 کاراکتر باشد در صورتی که در محیط Command Line تحت Windows می توانیم یک فایل با نامی به طول 256 کاراکتر و حتی پسوندی به طول 256 کاراکتر بسازیم . دقت نمایید که در تایپ دستورات، نوشتن آنها با حروف بزرگ یا کوچک انگلیسی مهم نمی باشد .
وارد شدن به یک درایو (Drive) : به طور ظاهری می توان یک هارد دیسک ( Hard Disk به معنی دیسک سخت - یکی از حافظه های جانبی رایانه) را به یک اتاق بزرگ تشبیه کرد . برای سادگی کار با این اتاق بزرگ آن را با استفاده از وسایلی از قبیل پارتیشن ( با استفاده از چوب، فلز و ... ) به قسمت های کوچک تری تقسیم می کنند . همچنین می توانند این عمل را انجام ندهند و از تمام فضای اتاق بزرگ استفاده کنند . این تقسیم بندی را می توان به تقسیم بندی یک هارد دیسک به چند درایو تشبیه کرد . همچنین داخل هر قسمت از اتاق برای قرار دادن اشیاء و وسایل خود قفسه هایی تعبیه می کنند که آنها را می توان با نام شاخه ( Directory ) یا پوشه ( Folder ) در داخل هارد دیسک تعبیر کرد . همچنین هر شاخه را می توان به زیر شاخه ( Subdirectory ) هایی تقسیم بندی کرد . سپس می توان وسایل خود را در این قفسه ها قرار داد که در رایانه وسایل همان پرونده ها ( File ) می باشند . به وضوح می توان دلیل استفاده از شاخه ها و زیر شاخه ها را دریافت چراکه اگر فایل های چند برنامه مختلف بدون تقسیم بندی و همگی در یک شاخه قرار می گرفتند، به دلایل مختلفی از قبیل هم نام بودن فایل ها، اجرای برنامه ها با مشکل روبرو می شد . همچنین تشخیص فایل های هر برنامه مشکل می شد . اما استفاده از درایو ها چه فایده ای دارد ؟!!! یکی از کاربرد های چند درایوی کردن هارد دیسک، سرعت اجرای برنامه ها به خصوص سیستم عامل می باشد . اگر سیستم عامل Windows دارای درایوی مجزا باشد، سرعت بیشتری خواهد داشت . همچنین معمولاً به هنگام نصب یک سیستم عامل جدید معمولاً برای سادگی کار و بالا بردن سرعت سیستم، اطلاعات درایو مربوط به سیستم عامل را format ( قالب بندی ) می کنند که با این عمل تمام اطلاعات داخل آن درایو از بین می رود، بنابراین باید بقیه فایل های مورد نیاز از جمله فایل های متنی، برنامه ها، تصاویر، فایل های صوتی، تصویری و ... در درایوی مجزا قرار داشته باشد . همچنین در صورت آسیب دیدن قسمتی از هارد دیسک یا به عبارتی اجرای دستوری اشتباه از سمت کاربر، همه اطلاعات شما آسیب نمی بیند . البته برای هارد دیسک های با ظرفیت کم، این عمل ( استفاده از چند درایو ) چندان پسندیده نمی باشد ولی برای هارد دیسک های با ظرفیت بیش از 40 گیگا بایت این عمل نه تنها مفید است بلکه از آسیب فیزیکی هارد دیسک نیز جلوگیری می کند . بر اساس تجربه به این نتیجه رسیده ام که هارد دیسک های با ظرفیت بالا اگر یک درایو داشته باشند، زودتر آسیب می بینند . حال به مبحث خود باز می گردیم . برای وارد شدن به یک درایو، ( به عبارتی تغییر نام درایوی که داخل آن می خواهیم قرار داشته باشیم، چراکه با اجرای محیط Command Line ما داخل یک درایو مثلاً C می باشیم و گفتن عبارت " وارد شدن به یک درایو " چندان صحیح نمی باشد . ) از دستور :< نام درایو > استفاده می کنیم . مثلاً با استفاده از دستور :d به درایو d خواهیم رفت . ( عباراتی که داخل <> نوشته می شوند، متغییر می باشند و بسته به نیاز شما نوشته می شود و علائم < و > در دستور تایپ نمی شوند . )
دستور DIR ( فهرست : Directory ) : این دستور برای نمایش اطلاعات داخل شاخه فعلی ( شاخه ای که در آن قرار داریم یا شاخه Root ) استفاده می شود . در Dos برای نمایش توضیحات یک دستور از پارامتر ؟/ بعد از دستور استفاده می شود . به عبارتی با اجرای؟/ dir تمام توضیحات مربوط به دستور dir در صفحه نمایش ظاهر می شود . از جمله پارامتر های مهم این دستور عبارتند از :
الف) dir/b) /b ) : با اجرای دستور dir فهرست فایل ها و شاخه ها همراه با توضیحاتی از قبیل سایز فایل ها، زمان ذخیره شاخه ها و فایل ها و ... ظاهر می شود . همچنین در ابتدای لیست برچسب ( Label ) درایو فعلی و شماره رده ای ( serial number ) آن ظاهر می شود . در پایان لیست نیز تعداد فایل های موجود در شاخه فعلی به همراه مجموع اندازه ( سایز ) آنها و همچنین تعداد شاخه ها و فضای خالی درایو فعلی نمایش داده می شود . با اجرای دستور dir/b تمام توضیحات مذکور، حذف می شود یعنی فقط فهرست فایل ها و شاخه های موجود در شاخه فعلی نمایش داده می شود .
ب) dir/o) /o) : این پارامتر فهرست ما را مرتب می نماید . پیش فرض مرتب سازی، مرتب سازی بر حسب نام فایل ها و شاخه ها می باشد به صورتی که ابتدا شاخه ها به ترتیب نام و سپس فایل ها به ترتیب نام نمایش داده می شوند . اجرای دستور dir/os یا dir/o:s فهرست ما را بر حسب اندازه (سایز) فایل ها مرتب می کند . همچنین دستور dir/od یا dir/o:d فهرست را بر حسب تاریخ و زمان ذخیره فایل ها و شاخه ها مرتب می کند . بقیه پارامتر ها را از روی راهنما بررسی نمایید .
پ) dir/p) /p) : این دستور هنگامی استفاده می شود که فهرست ما طولانی بوده و قسمتی از آن سریعاً رد شده و ما قادر به مشاهده آن نباشیم . با اجرای این دستور، نمایش فهرست اطلاعات ما شروع شده و پس از کامل شدن صفحه از فهرست فایل ها، سیستم منتظر یک کلید از طرف کاربر می شود . به همین ترتیب این روند ادامه پیدا می کند تا فهرست تمام شود .
ت) dir/w) /w) : این دستور فهرست فایل ها و شاخه ها ( بدون توضیحات درباره سایز، تاریخ و ... ) را به صورت سطری نمایش می دهد .
ث) dir/d) /d) : این دستور فهرست فایل ها و شاخه ها ( بدون توضیحات درباره سایز، تاریخ و ... ) را به صورت ستونی نمایش می دهد .
ج) بقیه پارامتر ها ( به جز s/ که در ادامه آمده ) را می توانید از راهنمای فهرست گیری ( DIR ) بررسی نمایید . نکته قابل توجه این می باشد که می توانید چندین پارامتر را با هم استفاده نمایید که تبعاً نتیجه فهرست، ترکیب هر یک از دستور ها می باشد . مثلاً dir/o/p/w فهرست فایل ها و شاخه های موجود را به صورت سطری و به ترتیب حروف الفبا و در صورت زیاد بودن به صورت صفحه به صفحه نمایش می دهد . همچنین می توانیم فهرست یک شاخه دیگر را نیز با دستور > آدرس شاخه مورد نظر < dir مشاهده کنیم . مثلاً دستور dir c:\ali فهرست اطلاعات داخل شاخه ali در درایو c را به ما نشان می دهد .
چ) dir/s) /s) : این دستور فهرست فایل ها و شاخه های شاخه فعلی و همچنین تمام فایل ها و شاخه های داخل شاخه فعلی را نمایش می دهد . در اجرای این دستور دقت کنید که حتماً از دستور dir/s/p استفاده کنید چراکه ممکن است شاخه ها و فایل های زیادی در فهرست شما باشد که سریعاً از مقابل چشم شما خواهند گذشت . بهتر است از دستور dir/s/o/p استفاده کنید که فهرست شما، صفحه به صفحه و به ترتیب حروف الفبا باشد . دقت کنید که از این فهرست گیری می توان برای جستجوی یک فایل استفاده کرد . دستور *.* dir تمام فایل ها و شاخه ها را به ما نشان می دهد . دستور dir c*d.*r تمام فایل هایی که ابتدای نام آنها c و انتهای نام آنها d و همچنین انتهای پسوند آنها r باشد را نشان می دهد . دستور dir c?d.rar تمام فایل های سه حرفی که ابتدای نام آنها c و انتهای نام آنها d و با پسوند rar می باشد را نشان می دهد به عبارتی ؟ معادل یک حرف و * معادل هر چند حرف در دستورات Command Line می باشد . بنابراین برای جستجوی شاخه Good کافیست دستور good < آدرس شاخه اصلی ( مثلاً dir/s/o/p ( c:\ali > را اجرا کنیم . همچنین می توان این دستور را به صورت dir c:\ali\good /o/p/s نوشت . برای فایل ها نیز به همین ترتیب عمل می کنیم ( نوشتن پسوند-چه به صورت کامل و چه به صورت مجهول یعنی با استفاده از * یا ؟ الزامی است). دقت کنید که ممکن است صد ها فایل پیدا شود . در صورتی که در هر مرحله از ادامه جستجو منصرف شدید و یا فایل مورد نظر را پیدا کرده و دیگر مایل به ادامه جستجو نمی باشید، از کلید های ترکیبی Ctrl+C استفاده نمایید .
دستور < نام شاخه > CD ( تغییر شاخه : Change Directory ) : برای وارد شدن به یک شاخه از این دستور استفاده می شود . مثلاً برای وارد شدن به شاخه ali دستور cd ali را اجرا می کنیم . نکته قابل توجه این است که می توانیم همزمان وارد چند شاخه و یا وارد شاخه ای از درایو دیگری نیز شویم . مثلاً اگر شاخه فعلی ما <c:\Ali باشد، با اجرای دستور cd d:\Reza به آدرس <d:\Reza می رویم .
دستور ..CD : برای بازگشت به شاخه قبلی از این دستور استفاده می شود . ( معادل دستور Up در پنجره های سیستم عامل ویندوز )
دستور \CD : این دستور ما را از تمام شاخه ها خارج کرده و به آدرس درایو جاری می برد . به عبارتی اگر مکان فعلی ما c:\ali\mohsen\1366 باشد، با اجرای دستور \cd به آدرس \:c منتقل می شویم . همچنین می توان از دستور cd\ ali استفاده کرد که مقصد ما c:\ali خواهد بود . مسلماً دستور cd\ ali\mohsen\1366 تغییری در آدرس اولیه ما ایجاد نمی کند .
دستور tree : این دستور نمایشی درختی از شاخه های داخل درایو ما خواهد داد . در صورتی که آدرسی در مقابل آن تایپ شود، شاخه های داخل شاخه مورد نظر نمایش داده می شوند . اگر بخواهیم فایل های داخل آن شاخه نیز نمایش داده شوند، از پارامتر f/ استفاده می کنیم . مثلاً دستور tree c:\ali /f یا tree/f c:\ali نمایشی درختی از فایل ها و شاخه های داخل شاخه ali به ما خواهد داد .
شش دستور مهم برای فایل ها و شاخه ها : ( ساختن – حذف کردن - تغییر نام )
الف) ساختن یک شاخه : برای این منظور از دستور < نام شاخه > md ( مخفف Make Directory به معنی ساختن شاخه ) استفاده می شود که شاخه ای با نام ذکر شده در جلوی دستور md در شاخه فعلی ساخته می شود . نکته قابل توجه این است که می توانیم شاخه ای داخل یک شاخه دیگر بسازیم به عبارتی با اجرای دستور md c:\ali\mohsen شاخه ای با نام mohsen داخل شاخه ali ساخته می شود .
ب) حذف یک شاخه : برای این منظور از دستور < نام شاخه > rd ( مخفف Remove Directory به معنی برداشتن، بردن، زدودن شاخه ) استفاده می شود که شاخه ای با نام ذکر شده در جلوی دستور rd در شاخه فعلی را حذف می کند . نکته قابل توجه این است که اگر داخل شاخه مورد نظر ما اطلاعاتی از قبیل فایل یا شاخه باشد، این دستور کار نمی کند و شاخه مورد نظر را حذف نمی کند . همچنین می توانیم شاخه ای داخل یک شاخه دیگر را حذف نماییم .
پ) ساختن یک فایل : برای این منظور از دستور < نام و پسوند فایل > copy con استفاده می شود . پس از اجرای این دستور اشاره گر به اول خط می رود که می توانیم اطلاعات درون فایل خود را تایپ نماییم . پس از اتمام وارد کردن اطلاعات کلید F6 و سپس Enter را فشار می دهیم . همانطور که اشاره شد اکثر دستور هایی از قبیل ساختن، حذف، تغییر نام، کپی، تغییر مکان و ... را می توان برای شاخه و یا فایلی با آدرس دیگری نیز انجام داد که از ذکر مجدد آنها خودداری می نمایم .
ت) حذف یک فایل : برای این منظور از دستور < نام و پسوند فایل > del ( مخفف Delete به معنی حذف کردن ) استفاده می شود . نکته قابل توجه این است که با اجرای دستور del *.txt تمام فایل هایی که دارای پسوند txt می باشند، از شاخه فعلی حذف می شوند . در اجرای این دستور ممکن است پیغامی مبنی بر تصمیم قطعی شما ( شبیه سیستم عامل Windows ) ظاهر نشود بنابراین در حذف فایل های دقت نمایید . همچنین با اجرای دستور *.* del تمام فایل ها ( با هر نام و پسوندی ) در شاخه فعلی حذف خواهند شد .
ث) تغییر نام یک شاخه یا فایل : برای این منظور می توان از هر سه دستور ren یا rename یا move استفاده کرد . مثلاً با فرض استفاده از دستور ren ( به دلیل سادگی در تایپ آن ) اگر بخواهیم نام شاخه ali را به alireza تغییر دهیم می نویسیم : ren ali alireza . اگر بخواهیم نام یک فایل ( یا پسوند یا هر دوی آنها ) را تغییر دهیم، باید نام و پسوند فایل را کامل تایپ کرد مثلاً می نویسیم ren doc1.txt dos.exe . البته صرف تغییر نام یک فایل، ماهیت آن عوض نمی شود یعنی با تغییر نام یک فایل متنی به فایل اجرایی، آن فایل هیچگاه اجرایی نمی شود .
نکته : برای اطمینان از ساخته شدن، حذف شدن و یا تغییر نام فایل ها و شاخه ها، از شاخه مورد نظر فهرست گیری می نماییم .
دو عمل مهم کپی و تغییر مکان فایل ها :
الف) کپی کردن : برای این عمل از دستور <آدرس و نام فایل مقصد> <نام فایل مورد نظر> copy استفاده می کنیم . در صورتی که فایل مورد نظر در شاخه جاری ( شاخه فعلی Current Directory ) نباشد، ذکر آدرس آن در قسمت اول الزامی است . همچنین می توانیم چندین فایل دارای یک مشخصه را کپی نماییم یعنی دستور هایی به صورت copy *.txt d:\Mahdy یا copy *.* d:\Mohammad صحیح می باشد . دستور copy c:\ali d:\reza تمام فایل های داخل شاخه ali ( نه زیر شاخه های آن مثلاً اگر فایل های در شاخه c:\ali\mohsen باشد، این فایل ها مد نظر نمی باشند ) را داخل شاخه reza کپی می کند . پارامتر y/ حالت Overwrite به کپی ما می دهد یعنی در صورت تکراری بودن فایل ها، پیغامی مبنی بر یکسان بودن فایل های داخل شاخه مبدأ و مقصد داده نمی شود . نکته : دستور < آدرس و نام فایل مقصد > … + < نام فایل مورد نظر > + < نام فایل مورد نظر > copy محتویات فایل های مورد نظر را به دنبال هم قرار داده و در فایل مقصد ذخیره می کند (Concat کردن دو فایل) . چنانچه فقط آدرس مقصد داده شود، نام و پسوند فایل مقصد، نام و پسوند اولین فایل می باشد .
ب) تغییر مکان فایل ها : برای این منظور از دستور move استفاده می شود . در جلوی دستور move آدرس فایل فعلی و پس از یک فاصله آدرس فایل مقصد را وارد می نماییم . مثلاً با اجرای دستور \:move c:\ali\book.txt d فایل book.txt به درایو d منتقل می شود . با اجرای دستور move c:\ali\*.* d:\Mohsen تمام فایل های داخل شاخه ali به شاخه Mohsen در درایو d منتقل می شود . نکته قابل توجه این است که یک فایل را در حین انتقال می توان تغییر نام نیز داد . مثلاً دستور move c:\ali\Reza.txt c:\ali\mohsen\Alireza.txt فایل رضا را به شاخه Mohsen منتقل کرده و نام آن را به Alireza تغییر می دهد .
مشاهده اطلاعات درون یک فایل : برای این منظور، دستور < نام و پسوند فایل > type را داریم .
دستور Cls : برای پاک کردن اطلاعات روی صفحه نمایش از این دستور استفاده می شود .
دستور Time : این دستور زمان فعلی سیستم را به ما نمایش می دهد . همچنین می توانیم زمان سیستم را تغییر دهیم . در صورت عدم تمایل به تغییر ساعت، کافیست کلید Enter را به ازای وارد کردن دوباره ساعت فعلی فشار دهیم . هرگاه بخاهیم فقط زمان فعلی سیستم را مشاهده نماییم ( بدون اعمال هیچ تغییری )، از دستور time/t استفاده می کنیم .
دستور Date : این دستور تاریخ فعلی سیستم را به ما نمایش می دهد . همچنین می توانیم تاریخ سیستم را تغییر دهیم . در صورت عدم تمایل به تغییر تاریخ، کافیست کلید Enter را به ازای وارد کردن دوباره تاریخ فعلی فشار دهیم . برای نمایش تاریخ فعلی، بدون تغییرات، می توان از دستور date/t استفاده کرد .
دستور Help : با استفاده از این دستور می توانید لیست دستورات Dos را مشاهده نمایید . دستور help copy معادل دستور ?/copy بوده که راهنمای دستور copy را به ما نشان می دهد . به هنگام اجرای دستور help مقداری از توضیحات سریعاً از جلوی چشم می گذرند و قابل مشاهده نمی باشند . برای مشاهده آنها بلافاصله پس از اجرای دستور، کلید Pause صفحه کلید را فشار دهید . برای ادامه کلیدی زده و در صورت لزوم دوباره نیز از کلید Pause استفاده نمایید .
خروج از Command Line : برای این منظور دستور Exit را اجرا می نماییم .
نکته : فقط فایل هایی با پسوند exe.* یا com.* یا bat.* اجرایی می باشند . به عبارتی با اجرای دستور book.txt، فایل به خصوصی اجرا نمی شود و اگر در سیستم عامل Windows XP باشید، برنامه Notepad باز شده و محتویات فایل book را نمایش می دهد . اگر دستور book را به تنهایی اجرا نمایید، سیستم عامل به دنبال فایل book.exe می گردد و در صورت نیافتن آن، پیغامی مبنی بر ناشناس بودن برنامه اجرا شده چاپ می نماید . نکته قابل توجه این است که فایل های با پسوند exe.* توسط برنامه هایی از قبیل C، C++، Pascal و ... نوشته می شوند و فایل های با پسوند com.* توسط زبان اسمبلی نوشته می شود و محتویات آنها قابل مشاهده و تغییر نمی باشند، در صورتی که فایل هایی با پسوند bat.* حاوی دستورات و آدرس های مختلفی می باشند که قابل مشاهده و تغییر می باشند . یکی از مهم ترین فایل های bat فایل autoexec.bat می باشد که معمولاً در اکثر رایانه های شامل سیستم عامل Windows 98 و Dos موجود می باشد . این فایل برنامه هایی که رایانه در هنگام روشن شدن اجرا می کند را مشخص می نماید .
برنامه Edit : برای ویرایش یک فایل متنی و حتی ساختن یک فایل می توان از آن استفاده کرد . برای اجرای آن دستور edit را اجرا می کنیم . محیط برنامه Edit شبیه به محیط Turbo C++ 3.0 و یا یک Notepad ساده می باشد . دستور edit c:\ali\tc.doc برنامه edit را اجرا کرده و فایل tc.doc را در آن باز می کند . دستور هایی از قبیل copy، cut، paste، find و ... در منو های برنامه موجود می باشند .
برنامه NC : همانطور که مشاهده کردید، در سیستم عامل Dos و یا محیط Command Line کار کردن کمی مشکل می باشد و نیازِ به تایپ دستورات، کمی کسل کننده و دارای اشتباهات زیاد می باشد . برنامه nc ( مخفف Norton Commander ) یکی از برنامه های تحت سیستم عامل Dos می باشد که البته در سیستم عامل Windows نیز قابل اجرا می باشد . این برنامه را باید تهیه کنید و اینطور نیست که مانند محیط Command Line بتوان آن را در منو های Windows پیدا و اجرا کرد . همچنین نسخه های جدید این برنامه، تحت Windows و به صورت Visual موجود می باشد . در این برنامه برای وارد شدن به یک شاخه کافیست با استفاده از کلید های مکان نمای صفحه کلید ( Cursor ) به روی شاخه مورد نظر رفته و Enter نماییم . برای اجرای یک فایل نیز به همین ترتیب عمل می کنیم . برای انتخاب فایل ها و شاخه ها از کلید Insert، برای انتخاب تمام فایل ها ( و یا فایل ها و شاخه ها بسته به تنظیمات برنامه nc ) از کلید *، برای کپی کردن فایل ها از کلید F5، برای تغییر نام و تغییر مکان فایل ها و شاخه ها از کلید F6، برای حذف فایل ها و شاخه ها از کلید F8، برای ساختن یک شاخه از کلید F7 استفاده می کنیم . نکته قابل توجه این می باشد که با استفاده از این برنامه می توان چندین فایل و شاخه را کپی کرد و یا تغییر مکان داد . همچنین می توان چندین فایل مجزا را انتخاب کرده و در شاخه مورد نظرمان کپی کنیم . برای کپی یا جابجایی، هم می توان با استفاده از آدرس مقصد عمل کرد و هم می توان قاب های برنامه ( پنجره سمت چپ یا راست ) را، آدرس مبدأ و مقصد قرار داد . در اینصورت به هنگام مشاهده پنجره کپی یا جابجایی، آدرس مقصد تایپ شده و آماده می باشد . برای تغییر مکان روی قاب ها ( عمل Shifting ) از کلید Tab استفاده می کنیم . با فشار دادن کلید F9 نوار منوی بالای برنامه ظاهر می گردد ( در صورت مخفی بودن ) . از کلید های ترکیبی Alt+F1 و یا Alt+F2 به ترتیب برای تغییر درایو قاب ( Panel ) سمت چپ و راست استفاده می کنیم . برای ویرایش یک فایل با قرار گرفتن روی آن، کلید F4 را فشار می دهیم . برای خروج از برنامه کلید F10 را فشار می دهیم . همچنین دستورات و کلید های بسیار دیگری نیز در این برنامه وجود دارد که به دلیل اختصار از بیان آنها صرف نظر می کنم .
نکته : در برنامه های Dos ( مانند NC و Edit ) تحت سیستم عامل Windows معمولاً موس کار می کند ولی در Dos ها و محیط های Command Line که تحت محیط Windows نمی باشند ( مثلاً هنگام استفاده از دیسک بوت )، اگر مایلید در حین استفاده از برنامه های NC و Edit از موس استفاده نمایید، می توانید فایل نصب موس برای سیستم عامل Dos را تهیه نمایید .

bsng110
شنبه 09 شهریور 1387, 18:04 عصر
دستورات دیگر :
1) دستور Mode : به وسیله این دستور می توانید حالت یک ابزار مانند کنسول و یا پورت را بررسی و تغییر دهید . صورت کلی این دستور به فرم mode <device> <Parameters …> می باشد . همانطور که قبلاً نیز گفته شده است، توسط دستور ?/mode می توانید راهنمای این دستور را مشاهده نمایید . در اینجا دو مورد پر کاربرد از دستورات mode را توضیح خواهم داد و بقیه را به عهده دوستان خواهم گذاشت . توسط دستور mode con: cols=80 lines=25 می توانید صفحه نمایش خود را در یک حالت استاندارد که 25 سطر و 80 ستون را شامل می شود، قرار دهید . چنانچه پنجره Command Line شما در حالت Full Screen قرار داشته باشد تعداد ستونی که به شما نمایش داده می شود فقط 80 ستون (به عبارتی 80 کاراکتر در یک سطر) می باشد و تعداد سطر ها نیز 25 یا 50 کاراکتر می باشد . شاید بپرسید پس اعدادی که روبروی cols و lines می دهیم پس چه می شود ؟ چنانچه پنجره محیط Command Line خود را از حالت Full Screen خارج نمایید (توسط کلید های Alt+Enter می توانید پنجره Command Line را به حالت Full Screen برده و یا از آن حالت خارج نمایید) حال تعداد سطر و ستون شما اعمال خواهد و چنانچه تعداد سطر یا ستون شما بیش از اندازه سطر یا ستون پنجره Command Line باشد یک Scroll Bar برای سطر یا ستون شما (و یا هر دو) در نظر گرفته خواهد شد . شاید بگویید، خوب این امکان از طریق دیگری نیز میسر بود ؟ بله می توان با کلیک راست بر روی عنوان پنجره Command Line و انتخاب گزینه Properties در زبانه Layout نیز می توان این تغییرات را انجام داد اما فعلاً این نکته را داشته باشید تا بعد ... ؟
2) دستور Ver : نسخه (Version) محیط Command Line شما را نشان می دهد .
3) دستور Volume) Vol) : نام و شماره سریال درایو جاری را نشان می دهد .
4) دستور Label : توسط این دستور نام و شماره سریال درایو جاری نشان داده شده و سپس می توانید نام درایو را نیز تغییر دهید . چنانچه قصد تغییر نام درایو را ندارید، کافیست یک Enter بزنید . البته می دانید که در پنجره My Computer نیز با کلید بر روی نام یک درایو و یا انتخاب درایو و فشار دادن کلید F2 نیز می توانید نام آن درایو را تغییر دهید (Rename) اما این هم یک روش است .
5) دستور XCopy : همانطور که قبلاً نیز اشاره شد در محیط Command Line جهت کپی کردن یک شاخه به همراه تمام فایل ها و زیر شاخه های آن نمی توان از دستور Copy استفاده کرد . فرم کلی دستور XCopy به صورت XCopy source destination می باشد . دستور Xcopy دارای پارامتر های زیاد و متنوعی می باشد اما پارامتر مورد نظر ما s/ می باشد که توسط آن می توان تمام فایل ها و زیر شاخه های مبدأ را در مقصد کپی کرد . مثلاً دستور xcpoy /s c:\ali d:\reza باعث می شود تمام فایل های و زیر شاخه ها و فایل هایی که در آنها می باشند، در شاخه d:\reza کپی شود .
6) دستور Print : این دیگه خداییش تابلوه . فرم کلی دستور به صورت Print [/d:device] FileName می باشد . پارامتری که در [] نوشته شده است در صورت لزوم نوشته می شود وگرنه نیازی به نوشتن آن نیست . پیش فرض (چنانچه چاپگر داشته باشید) خروجی بر روی چاپگر شما چاپ می شود . بنابراین دستور print ali.txt با دستور print /d:prn ali.txt برابر است . (prn استریم خروجی استاندارد برای چاپگر می باشد) همچنین دستورات type ali.txt و print /d:con ali.txt معادل اند چراکه con استریم ورودی/خروجی استاندارد برای صفحه کلید و مانیتور می باشد .
7) دستور Title : توسط این دستور می توانید عنوان پنجره فعلی که باز است (مثلاً پنجره Command Line) را تغییر دهید مثلاً توسط دستور title Hello عنوان پنجره به Hello تغییر می کند .
8 ) دستور Prompt : بنده از این دستور خیلی خوشم می آید ولی نمی دانم چرا از توضیح آن خوشم نمی آید . به هر حال پارامتر های و طرز کار آن را خواهم گفت . می دانید هنگامی که در محیط Command Line وارد می شوید یک اعلان بر روی صفحه ظاهر می شود و مکان نما در مقابل آن چشمک می زند . شما می توانید توسط این دستور این اعلان را تغییر دهید . مثلاً توسط دستور prompt ali از این به بعد اعلان محیط Command Line که به آن Prompt گفته می شود به صورت ali خواهد بود . پارامتر های مختلف prompt موجب می شود که علاوه بر عبارت مورد نظر شما همیشه عبارت های دیگری نیز در اعلان ظاهر بشوند که ترتیب ظاهر شدن آنها به ترتیب تایپ کردن آنها وابسته است . مثلاً پارامتر $A موجب می شود علامت "&" بر روی صفحه نشان داده شود . پارامتر $B باعث می شود علامت "|" (Pipe) در اعلان شما قرار گیرد . پارامتر $C موجب می شود علامت ")" در اعلان شما قرار گیرد . پارامتر $D موجب می شود تاریخ جاری در اعلان شما نشان داده شود . پارامتر $E موجب می شود علامت مربوط به کد اسکی عدد 27 ( Escape ) که به صورت یک پیکان به سمت چپ می باشد بر روی صفحه نشان داده شود . به همین ترتیب $F برای "(" و $G برای "<" و $H برای علامت مربوط به کد اسکی 8 (BackSpace) می باشد به عبارتی کاراکتر قبلی را پاک می کند و از این پارامتر می توان برای پاک کردن فواصل اضافی که توسط دیگر پارامتر ها تولید می شود استفاده کرد . همچنین پارامتر $L برای ">" و $N برای نمایش درایو جاری و $P برای نمایش درایو جاری به همراه آدرس مکان جاری (نام شاخه ها و زیر شاخه های که مربوط به آدرس فعلی می باشد) و $Q برای "=" و $S برای چاپ یک Space و $T برای نشان دادن ساعت جاری و $V برای نشان دادن نسخه ویندوز فعلی $ معادل یک CR و LF می باشد یعنی به ازای CR (Cariage Return) به ابتدای خط جاری و به ازای LF (Line Feed) به سطر بعد می رود به عبارتی این پارامتر موجب می شود که مکان نما در ابتدای سطر بعد قرار گیرد . پارامتر $$ برای نمایش "$" به کار می روند . توسط دستور $+Parameter می توانید یکی از پارامتر هایی را که اضافه کرده اید، حذف نمایید (مثلاً ساعت، تاریخ و ...) . چنانچه به این دستور پارامتری ارسال نشود، تمام پارامتر های جاری را حذف می کند و فقط متن هایی که قبلاً در prompt وجود داشت، نمایش داده می شود . دقت کنید که پیش فرض محیط Command Line به صورت prompt $P$G می باشد . البته می توانید چنانچه فراموش کردید توسط دستور ?/prompt پارامتر های مزبور را به همراه توضیحات لازم مشاهده نمایید .
9) دستور MKDIR : این دستور نیز همانند MD موجب ایجاد یک شاخه می شود . (به توضیحات مربوط به MD مراجعه نمایید)
10) دستور Attrib : با این دستور می توان صفات (Attributes) یک فایل را تغییر داد و یا لیست تمام فایل های موجود در شاخه جاری را به همراه صفاتشان مشاهده نمود . چنانچه این دستور بدون پارامتر و نام فایل باشد همانطور که گفته شد فهرست فایل ها را به همراه صفاتشان نشان می دهد . چنانچه این دستور به همراه نام یک فایل و یک پارامتر اجرا شود، آن پارامتر برای فایل مزبور عمل خواهد کرد . چنانچه به هماره پارامتری علامت "+" بیاید، آن صفت برای فایل ما تنظیم (Set) می شود و چنانچه "-" به کار برده شود صفت مورد نظر حذف خواهد شد . صفاتی که می توان در این دستور استفاده کرد، R برای Read Only بودن فایل، A جهت Archive بودن فایل، S جهت تنظیم سیستمی بودن فایل و H جهت Hidden (مخفی) بودن فایل می باشد . البته دستور attrib را برای شاخه ها نیز می توان به کار برد . چنانچه این دستور برای شاخه ای استفاده شود و پارامتر S/ نیز برای آن فراخوانده شود، تمام فایل ها و شاخه های داخل شاخه نامبرده به همراه تمام فایل ها و شاخه های موجود در زیر شاخه های آن با صفت یا صفت مزبور تنظیم می شوند . دستور attrib را می توان به صورت ترکیبی نیز به کار برد مثلاً attrib ali.txt +h -s موجب می شود که فایل ali.txt مخفی شود و چنانچه سیستمی بوده، صفت سیستمی بودن آن غیر فعال شود . دقت کنید که بین +h و –s باید یک فاصله بگذارید . دقت کنید چنانچه یک فایل مخفی باشد، توسط دستور del نمی توان آن را پاک کرد و ... . (این نکات را داشته باشید تا به ++C برسم اونوقت ببینید چه امکانات وسیعی در اختیار شما قرار می گیرد بر خلاف آنچه که داشنجویان با یاد گرفتن چند تابع از کلاس fstream فکر می کنند خدای فایل ها شده اند حتی دانستن این نکات نیز برای مدیریت فایل ها بسیار کم است)
11) دستور Color : توسط این دستور می توانید رنگ متن و پشت زمینه تمام صفحه را عوض کنید بدون اینکه حتی یک کاراکتر از صفحه پاک شود . این دستور به صورت color attrib به کار برده می شود که attrib یک عدد دورقمی هگزادسیمال می باشد یعنی از صفر تا F می باشد . می دانید که رنگ های صفر تا 7 تیره و رنگ های 8 تا 15 روشن می باشد . لیست رنگ های را توسط دستور ?/color می توانید مشاهده نمایید . چنانچه دستور color را بدون پارامتر فراخوانی کنید، رنگ متن و پشت زمینه به صورت پیش فرض (خاکستری بر روی مشکی) بر می گردد . دستور color f0 خیلی حال می دهد و یا color 70 نیز دارای رنگ های مناسبی می باشند . (از این به بعد به محیط Command Line نگویید همان صفحه سیاهه وا ... ؟)
12) در محیط Command Line توسط دستورات start و exit می توانید یک محیط Command Line دیگر باز کرده و یا از محیط جاری خارج شوید .
*** فقط برای علاقه مندان خیلی شدید : توضیح دستور IF به یک دفترچه صد برگ خط کشی شده نیاز دارد بنابراین از توضیح درباره آن امتناع می کنم اما توسط دستور ؟/if می توانید امکانات آن را بررسی نمایید . از این دستور در batch فایل ها استفاده می شود . همانطور که قبلاً نیز توضیح دادم این فایل ها خود اجرایی نیستند بلکه دستوراتی از سیستم عامل را در خود نگهداری می کنند و به هنگام اجرای آنها، دستورات داخل خود را به اجرا می گذارند . توسط دستور IF می توانید یک مدیریت قوی بر اجرای برنامه های خود داشته باشید . می دانید که در ++C اکثر توابع ما به خصوص تابع main مقدار خروجی دارند . توسط دستور IF ERRORLEVEL number می توانید این مقدار خروجی را مدیریت کنید . مثلاً چنانچه این مقدار -1 بود فایل دیگری را اجرا نمایید و یا پیغامی بر روی صفحه نشان دهید و ... . این دستور چنانچه مقدار خروجی برنامه بزرگتر یا مساوی number بود عمل می کند یعنی ارزش true دارد .
*** دستوراتی که مربوط به batch فایل های می شوند عبارتند از : IF – GOTO – CALL – SHIFT – FOR – SETLOCAL – ENDLOCAL و ...
البته بنده نیز با هیچکدام از آنها آشنا نمی باشم و با آنها کار نکرده ام ولی چنانچه روزی نیاز به استفاده از آنها داشتید، حداقل در اینجا لیستی از دستورات مربوطه وجود دارد .
*** راستی، چنانچه دستوری را تایپ کردید و بعد پشیمان شدید، برای پاک کردن آن کافیست فقط کلید Esc را فشار دهید و نیاز به پاک کردن آن توسط BackSpace نمی باشد . توسط کلید های Up و Down نیز می توانید دستوراتی که قبلاً اجرا کرده اید را مشاهده نمایید . توسط کلید F7 می توانید پنجره ای را مشاهده کنید که در آن لیست تمام دستوراتی که اجرا کرده اید را مشاهده نمایید . توسط کلید های Alt+F7 می توانید این لیست را پاک نمایید . توسط کلید F8 می توانید یک دستور را جستجو کنید . مثلاً قبلاً دستور color fc را اجرا کرده اید . با تایپ کردن c و فشار دادن این کلید آخرین دستوری که با c شروع می شود برای شما نشان داده می شود . چنانچه این کلید را دوباره فشار دهید، یکی مانده به آخرین دستوری که با c شروع می شود نشان داده می شود . در ضمن این عمل به صورت حلقوی تکرار می شود یعنی فقط رسید به اولین دستوری که با c شروع می شود، چنانچه دوباره کلید F8 را فشار دهید، دوباره به آخرین دستوری که با c شروع می شود بر می گردد و آن را نشان می دهد . توسط کلید های چپ و راست می توانید دستور خود را ویرایش نمایید . چنانچه خواستید حالت OverWrite داشته باشید، یعنی متنی که می نویسید بر روی متن قبلی قرار گیرد یعنی حرف قبلی که در مکان جاری مکان نما است، پاک شود و حرف شما آنجا قرار گیرد، کلید Insert را فشار دهید . توسط کلید F9 پنجره ای ظاهر می شود که در آن می توانید شماره دستور مورد نظر خود را وارد نمایید و آن دستور بر روی صفحه نشان داده می شود . توضیحات بیشتر را توسط دستور ؟/Doskey مشاهده نمایید . (البته من که به هوش شما شک ندارم ولی فکر کنم شما نیز مثل من چیز بیشتری نخواهید فهمید)
*** در پایان می خواهم یک عمل بسیار جالب را برای شما بگویم که توسط آن می توانید کار های بسیار جالبی انجام دهید . فرض کنید برنامه توسط ++C نوشته اید که !500 را محاسبه می کند و نتیجه را بر روی صفحه نمایش نشان می دهد . این برنامه (به فرض) هیچ ورودی ندارد . می دانید که 100 فاکتوریل یک عدد خیلی بزرگ است . (این عدد فقط 120 عدد صفر دارد . این موضوع را می توان توسط فرمول ...+[n/5]+[n/25]+[n/625] از درس گسسته پیش دانشگاهی فهمید که در آن [] نماد جزء صحیح است و n عدد مورد نظر در n! می باشد .) خوب مسلماً حاصل در یک صفحه نمایش 25*80 نمایش داده نخواهد شد و این حاصل باید در چندین مرحله چاپ شود . حتی اگر توانستیم برنامه خود را به گونه ای تغییر دهیم که در چندین صفحه این خروجی چاپ شود، حال چه کسی حوصله دارد که این ارقام را بر روی کاغذ بنویسد و تحویل خانم بهشتی (استاد گرامی ام) دهد . شاید بگویید اشکالی ندارد، در برنامه خود آدرس یک فایل را از کاربر می گیریم و آن را باز کرده و سپس کاراکتر های مربوط به n! را در آن چاپ می کنیم . خوب ، این هم فکری است . اما فکر کنک چنانچه بخواهید این امکان را با آرگومان های خط فرمان نیز ترکیب کنید، دیگر برنامه شما بسیار پیچیده می شود و این تغییرات برای آن مدت زمان زیادی را صرف می کند . حال بیایید یک برنامه دیگر را در نظر بگریم که در آن قرار است یک متن چند صفحه ای از کاربر گرفته شود و در آن تعداد کلمات پیدا شده و بر روی صفحه نمایش نشان داده شود . می دانید که هیچ کس حاضر نمی شود چند صفحه متن را توسط صفحه کلید وارد کرده و تازه چنانچه با مشکلی مواجه شود مجبور شود تمام آن را دوباره تایپ کند . همچنین ما نیز به عنوان یک برنامه نویس حاضر نیسیتم یک آرایه چند میلیون کاراکتری بگیریم تا یک متن را از کاربر بخوانیم . لابد باز هم می گویید از یک فایل استفاده می کنیم . می گویم باز هم تا حدی درست می گویید ولی فراموش نکنید که مدیریت این فایل ها برای ما خیلی زمان بر می باشد و این که یک فایل را تنظیم کنیم و آن را بخوانیم و تا به انتهای فایل نرسیده ایم تعداد کمات را بشماریم شاید حداقل برای من مقدار سنگین باشد چرا که حوصله کد نویسی زیادی را ندارم . حال می گویید چه کار کنیم ؟ یک کلمه : کافیست ورودی و خروجی استاندارد را عوض کنیم . در حالت اول که می خواستیم خروجی ما یک فایل به جای صفحه نمایش باشد، برنامه خود را به صورت عادی می نویسیم و برای چاپ هم از cout استفاده می کنیم . در اینصورت خروجی برنامه ما در فایلی که مربوط به استریم cout است قرار می گیرد که پیش فرض این فایل همان con است که برای خروجی استاندارد از صفحه نمایش استفاده می کند . حال برنامه خود را اجرا کرده و یک فایل exe از آن بسازید . فرض کنید نام فایل fact.exe باشد . کافیست دستور fact.exe >fact500.txt را اجرا نماییم . در اینصورت چنانچه فایل fact500.txt موجود نباشد، این فایل ایجاد شده و نتیجه برنامه در آن ذخیره می شود . چنانچه فایل موجود باشد، ابتدا اطلاعات آن پاک می شود و سپس خروجی در آن قرار می گیرد . خیلی جالب بود . بدون استفاده از امکانات فایل ها این عمل را بر عهده سیستم عامل قرار دادیم یعنی سیستم عامل ابتدا فایل ما را ساخته و سپس خروجی استاندارد را به جای con فایل fact500.txt قرار می دهد . بنابراین می توانید حدس بزنید دستور dir c:\ >c.txt چه عملی انجام می دهد . احسنت، به جای اینکه فهرست فایل ها و شاخه های جاری را بر روی صفحه نمایش نشان دهد، در فایل c.txt قرار می دهد . همچنین ورودی استاندارد را نیز به همین صورت می توان تغییر داد یعنی ابتدا ورودی های برنامه را در یک فایل مثلاً input.txt ذخیره می کنیم که در آن باید به همان صورتی که ورودی برای برنامه فرستاده می شود تایپ شود . سپس توسط دستور myfile.exe <input.txt می توانید ورودی استاندارد را از con به input,.txt تغییر دهید . همچنین توسط دستور myfile.exe <input.txt >output.txt می توانید ورودی و خروجی استاندارد را تغییر دهید . فقط دقت کنید که دستوراتی مثل (gotoxy(int,int و ()clrscr بر روی صفحه نمایش اثر می گذارند نه بر روی فایل خروجی یعنی با اجرای دستور ()clrscr محتویات فایل پاک نمی شود . به قول استاد عزیزم جناب آقای نیکیان، لذت می برید ؟!!
بقیه دستورات محیط Command Line را چنانچه نیاز داشتید خودتان بررسی نمایید چرا که از این به بعد باید با مفاهیم زیاد دیگری آشنا شوید که بنده نیز خیلی از آنها را نمی دانم .
ادامه داستان در قسمت " مطالبی از ++C که هرگز گفته نشد " ...

bsng110
شنبه 09 شهریور 1387, 18:09 عصر
به نقل از http://enghelper.com/forum/viewtopic.php?t=33&start=16 :

با عرض سلام و خسته نباشید خدمت دوستان مشتاق ++C


نمی دانم که آیا فرصت کرده اید مطالب مربوط به محیط Command Line را مطالعه نمایید یا خیر ؟
لینک مطالب : http://www.enghelper.com/forum/viewtopic.php?t=89
اصلاً از یک جای دیگر شروع می کنم . فرض کنید بخواهید ابتدای برنامه خود (مثلاً با نام exm1.cpp) این فایل زیبا را اجرا نمایید : بسم الله الرحمن الرحیم (http://www.friend.enghelper.com/Files/BESM.rar)
برای این منظور چه راه حلی را پیشنهاد می کنید ؟ یک راه استفاده از یک bat فایل است به این صورت که یک فایل text با پسوند bat درست کرده و در محیط NotePad داخل آن به ترتیب در دو خط دستورات زیر را تایپ کنید :
كد:
[Path\]besm.com
[Path\]exm1.exeمثلاً چنانچه فایل besm در شاخه c:\Utils قرار داشته باشد و فایل exm1.exe در شاخه d:\project قرار داشته باشد دستورات زیر را می نویسیم :
كد:
C:\Utils\besm.com
D:\project\exm1.exeحال فایل خود را ذخیره کرده و از NotePad خارج شوید . چنانچه فایل bat ساخته شده را اجرا کنید به ترتیب ابتدا فایل besm اجرا شده و سپس exm1.exe اجرا می شود . حال چنانچه فایلی با نام end.exe نیز داشته باشیم و بخواهیم پس از اتمام برنامه اجرا شود، آن وقت چه عملی باید انجام داد ؟ در این حالت نیز کافیست پس از نام فایل برنامه در فایل bat نام و آدرس فایل end.exe را بنویسیم . اما این حالت فقط برای فایل های مجزا به کار می رود . فرض کنید توسط یک برنامه اسمبلی یا ++C یا هر زبان دیگری شما قادر به تغییر رنگ یک قسمت از صفحه نمایش باشید . حال در یک برنامه که مربوط به رسم یک مستطیل می باشد، می خواهید در وسط اجرای برنامه آن قسمت از صفحه نمایش تغییر رنگ داده و سپس برنامه شما ادامه پیدا کند . یک راه حل برای رفع این مشکل دو قسمت کردن برنامه می باشد اما این روش نیز بسیار کارآمد نمی باشد چرا که چنانچه در قسمت اول اطلاعاتی را از کاربر گرفته باشید، در هنگام اجرای قسمت دوم فایل، مجبورید دوباره آنها را از کاربر بگیرید و یا قبل از خروج از قسمت اول برنامه آنها را در یک فایل ذخیره نمایید و مشکلات بسیار دیگری را نیز متحمل شوید . حال به نظر شما باید چه کار کرد ؟ به قول استاد نیکیان، احساس نیاز می کنید ؟ حال به معرفی سه تابع در ++C می پردازم که خوشبختانه در تمام کامپایلر ها موجود می باشند . تابع اول system نام دارد . این تابع فقط یک آرگومان دارد و آن هم یک رشته می باشد . اما محتویات آن رشته چیست ؟ اینجاست که فرامین محیط Command Line به کار می آید . شما می توانید توسط این تابع، یکی از فرامین محیط Command Line را اجرا نمایید . مثلاً توسط کد ;(&quot;system(&quot;cls می توانید صفحه نمایش را پاک کنید که البته دستور cls موجب می شود مکان نما به اولین نقطه سمت چپ و بالای مانیتور نیز برود . و یا جالب تر اینکه فرض کنید بخواهید یک برنامه مربوط به یک دفترچه تلفن بنویسید . چنانچه بخواهید یک شاخه ساخته و در آن فایل های خود را ذخیره نمایید، حرکت زشتی است که از کاربر بخواهید برود یک شاخه بسازد و نام آن را به شما بگوید و شما یک فایل در آن شاخه باز کنید . با این روش برنامه نویس بودن شما زیر سوال می رود ؟ می توانید نام شاخه را از کاربر دریافت کرده و توسط دستور زیر یک شاخه در برنامه خود ایجاد کنید :
كد:
char name[15],md[17]={&quot;md &quot;};
cin.getline(name,11);
strcat(md,name);
system(md);حال فکر کنم بفهمید چرا دستورات محیط Command line را برای شما توضیح می دادم . شما به عنوان یک برنامه نویس هیچگاه نمی توانید ماوس کاربر را در اختیار بگیرید و یک My Computer باز کنید و به شاخه مورد نظر کاربر رفته و راست کلیلک کرده و گزینه New Folder را انتخاب کرده و یک شاخه با نام مورد نظر کاربر بسازید (-> : فیلم هندی) اما با این دستور ساده به راحتی می توانید این عمل را انجام دهید . همچنین برای copy و rename و delete کردن یک فایل نیز به راحتی می توانید توسط دستورات محیط Command line عمل خود را انجام دهید . در ضمن فایل سرآمد این تابع نیز process.h می باشد که باید در ابتدای برنامه اضافه شود . در اصل برنامه های ویندوز نیز دارای همین منوال می باشد به عبارتی آنچه که شما در ویندوز اجرا می نمایید برای ساخت یک شاخه، یا کپی کردن یک فایل و ...، یک جنبه گرافیکی و نمایش دارد که شما بر روی صفحه نمایش می بینید و یک جنبه پشت زمینه دارد که اجرای همین فرامین می باشد و اکثر برنامه نویسان برای قوی کردن خود باید با این فرامین آشنا شوند . می بینید که با معرفی یک تابع ساده و چند دستور از محیط Command Line امکانات شما را چند برابر افزایش دادم . به عبارتی از این به بعد مدیریت شما تنها بر برنامه خود نمی باشد بلکه می توانید منابع سیستم را نیز مدیریت نمایید .
اما تابع دوم ؟ در همان فایل سرآمد یعنی (process.h) چندین تابع وجود دارد که به آنها خانواده های exec… گویند .
لیست توابع : execl ، execle ، execlp ، execlpe ، execv ، execve ، execvp ، execvpe
تابع سوم ؟ خانواده spawn… :
لیست توابع : spawnl ، spawnle ، spawnlp ، spawnlpe ، spawnv ، spawnve ، spawnvp ، spawnvpe
حال باید بدانیم این توابع چه عملی انجام می دهند ؟! ابتدا یک نکته ؟ تابع system خوب و مفید بود اما فقط برای اجرای دستورات محیط .C.L . چنانچه بخواهیم یک فایل با چند آرگومان (آرگومان خط فرمان) را صدا بزنیم، و یا یک فایل که در شاخه ای به خصوص می باشد، توسط آن تابع غیر ممکن است . اول از همه باید بدانید در تمام این توابع که یک پردازش دیگر به نام پردازش فرزند ایجاد می کنند، نحوه پیدا کردن فایل مربوط به پردازش فرزند چگونه است ؟! همانطور که گفته شد فایل اجرا شده توسط این توابع را پردازش فرزند گفته و فایل اصلی که در آن این توابع اجرا می شوند را پردازش مادر یا اصلی گویند . نحوه اجرای این فایل ها مانند اجرای یک تابع در وسط یک تابع دیگر می باشد و مکانیزم یکسانی دارد . اما آدرس فایل ها از کجا پیدا می شود . مثلاً dir یا copy یا besm یک فایل می باشند . این فایل ها از کجا آدرس خود را برای سیستم مشخص می نمایند ؟ فایل besm را ما خود می توانیم آدرس بدهیم و در تابع execl یا spawnl آدرس آن را بنویسیم اما در تابع system چنانچه آدرس بنویسید، آن فایل اجرا نمی شود چونکه این تابع فقط می توانید فرامین سیستم عامل و فایل هایی که توسط دستور path مشخص شده اند را اجرا کند . به عبارتی چنانچه شما بنویسید که فایل exm.exe اجرا شود، سیستم عامل ابتدا در شاخه جاری که برنامه اجرا می شود، به دنبال این فایل می گردد و چنانچه نتوانست فایل را پیدا کند به دنبال آدرس هایی که در دستور path مربوط به محیط .C.L مشخص شده است می رود و چنانچه باز هم موفق به پیدا کردن فایل نشد، با شکست به پردازش اصلی باز می گردد . حال فرض کنیم که به تابع بگوییم که فایل exm را اجرا کند، سیستم عامل به ترتیب در همان مسیر هایی که گفته شد، ابتدا به دنبال فایل exm.exe و سپس exm.com و سپس exm.bat می گردد و به ترتیب، هر کدام را که یافت، اجرا می کند . این بود نحوه پیدا کردن فایل معرفی شده توسط ما برای هر یک از توابع فوق .
حال ببینیم توابع معرفی شده در بالا چه عملی انجام می دهند :
توابعی که نام exec دارند موجب می شوند که یک پردازش در پردازش اصلی اجرا شود و پس از خاتمه آن پردازش مادر نیز خاتمه می یابد یعنی حتی اگر شما در وسط برنامه خود یکی از توابع مربوط به این خانواده را صدا بزنید، بعد از اتمام آن پردازش فرزند، پردازش مادر نیز خاتمه یافته و بقیه فرامین برنامه اجرا نخواهد شد . این تابع هنگامی مفید است که بخواهید به جای پردازش فعلی، پردازش دیگری در برنامه شما انجام شود . مثلاً فرض کنید قرار است توسط یک برنامه با توجه به درخواست کاربر، چنانچه عدد یک وارد شما شما یک فایل را کپی کنید و اگر عدد 2 وارد شد، شما آن فایل را پاک کنید و بلافاصله از برنامه خارج شوید . فایل های مربوط به پاک کردن و کپی کردن نیز مجزا می باشند، بنابراین نیاز نیست که عمل اضافه ای انجام دهید، با اجرای دستور ;(execl(&quot;copy&quot;,0 فایل کپی اجرا شده و پردازش مادر نیز خاتمه می یابد . اما خانواده spawn… به این صورت عمل می کند که در ابتدا یک پارامتر می گیرد که توسط آن مشخص می شود پس از اجرای پردازش فرزند، پردازش مادر چگونه بر خورد نماید . پارامتر اول می تواند مقادیر P_WAIT (صفر) یا P_NOWAIT (یک) یا P_OVERLAY (دو) را بگیرد که همه اینها ماکرویی برای عدد مقابلشان می باشند یعنی می توانید از اعداد به جای ثابت های استفاده کنید . ثابت P_WAIT که بیشتر مد نظر ماست، موجب می شود که پردازش مادر منتظر شود تا پردازش فرزند خاتمه یابد سپس پردازش مادر ادامه یافته و اجرا می شود . پارامتر P_NOWAIT موجب می شود که پردازش های مادر و فرزند (در صورت امکان) همزمان اجرا شوند که معمولاً درست عمل نمی کند . اما ثابت سوم یعنی P_OVERLAY موجب می شود که تابع spawn مانند exec عمل کند یعنی پس از خاتمه پردازش فرزند، پردازش مادر نیز خاتمه یابد . خوب، تا حالا تفاوت نیمی از توابع بالا را فهمیدید اما دیگر تفاوت های توابع بالا : توابعی که پسوند l دارند دارای پارامتر های معلومی می باشند مثلاً صفر یا یک یا دو یا ... پارامتر می باشند که باید پشت سر هم وارد شده و در آخر آنها نیز یک اشاره گر Null وجود داشته باشد مثلاً فایلی را در نظر بگیرید که چند عدد توسط آرگومان های خط فرمان گرفته و حاصل جمع آنها را چاپ می کند . برای اجرای این فایل در وسط یک فایل دیگر کافیست دستور زیر را بنویسیم :
كد:
spawnl(P_WAIT,&quot;c:\sum&quot;,&quot;12&quot;,&quot;-14&quot;,&quot;0&quot;,&quot;7&quot;,NULL);می دانید که نوشتن آدرس فایل در صورتی که فایل در مکان معتبری باشد، نیاز نیست یعنی اگر فایل sum در همان شاخه ای باشد که برنامه ما در آن اجرا می شود، نیازی به نوشتن آدرس آن نمی باشد . همچنین دوستان دقت کنند که NULL برابر صفر است نه '0\' . این دو دو مقوه مجزا می باشند که بعضاً می بینم دوستان با هم اشتباه می کنند . 0 برای کامپایلر مشخص می کند که این اشاره گر به هیچ جایی اشاره نمی کند اما '0\' یعنی عدد صفر از نوع integer که کامپایلر در صورت استفاده از آن به شما خطای نحوی می دهد . برگردیم سر اصل موضوع : توابعی که دارای پسوند v (حرف V انگلیسی) پس از نام خود می باشند، آرگومان های خود را توسط یک آرایه ای از اشاره گر های کاراکتری دریافت می کنند به عبارتی مانند آرگومان های خط فرمان عمل می کنند که باید آخرین عنصر این آرایه نیز NULL باشد . به عبارتی می توان گفت اعلان spawnv به صورت زیر است :
كد:
int spawnv(int mode,char *path,char *argv[]);که argv در اصل یک ماتریس از کاراکتر ها می باشد که در این ماتریس سطر ها الزاماً هم طول نمی باشند . پیشوند های e، p، و pe را خود دنبال کنید ولی معمولاً آن دو تابعی که معرفی شد بیشتر کاربرد دارند . چنانچه نخواهید پارامتری به فایل خود ارسال کنید، اجرای هر کدام از توابع فوق تفاوتی ندارد .
نکته دیگر : چنانچه توابع فوق اعم از خانواده exec یا spawn و یا system موفق به اجرای برنامه شما نشوند، خروجی -1 برگردانده و نوع خطا را نیز در متغییر سراسری errno قرار می دهند که این متغییر در فایل سرآمد stdlib.h وجود دارد و توسط تابع strerr می توان نوع خطا را بر روی صفحه نمایش چاپ کرد . این تابع رشته ای بر می گرداند که در آن خطای برنامه وجود دارد و توسط دستور زیر می توان این پیغام را بر روی صفحه نمایش چاپ کرد :
كد:
int err=spawnl(0,&quot;hello&quot;,0);
if(err==-1)
cout<<strerr(errno);این تابع و متغییر سراسری errno را به خاطر بسپارید چرا که اکثر توابع ++C که از قدیم (C) وجود دارند، این گونه خطای خود را مشخص می کنند . فراموش نکنید که در صورت استفاده از errno یکی از فایل های سرآمد stdlib.h یا errno.h یا stddef.h را به برنامه خود اضافه کنید .
نکته دیگری به ذهنم نمی آید، چنانچه دوستان بیشتر در خاطرشان هست خود اضافه کنند .

bsng110
شنبه 09 شهریور 1387, 18:11 عصر
باسمه تعالی

استفاده از توابع ویژه کامپایلری در کامپایلر دیگر :
تأکید می کنم که این روش فقط در مورد بعضی از توابع کارآمد می باشد . با توضیح روش می توانید درک کنید که چه نوع توابعی را می توان به این صورت استفاده کرد . فرض کنیم می خواهیم تابع ()clrscr را Visual Studio 2005 استفاده کنیم . چنانچه به مستندات این کامپایلر مراجعه نمایید، خواهید دید که در فایل سرآمد conio.h این تابع حذف شده است . حال چگونه از این تابع استفاده نماییم ؟ خیلی ساده است مخصوصاً برای دوستانی که با کامپایلر های TC++ 3.0 و یا Borland C++ 5.0 کار نموده اند . ابتدا برنامه ساده زیر را در یکی از دو کامپایلر مذکور نوشته و سپس فایل اجرایی برنامه را می سازیم (مثلاً clrscr.exe) و کپی آن را در شاخه پروژه مربوط به برنامه ++VC (مخفف ++Visual C) قرار می دهیم .
كد:
#include <conio.h>
int main()
{ clrscr();
return 0;
}حال به جای اینکه در برنامه مربوط به ++VC کد ;()clrscr را بنویسیم، کد ;(spawnl(0,"clrscr.exe",0 را می نویسیم . چنانچه برنامه را ردیابی (Trace) نمایید، خواهید مشاهده کرد که کد مذکور مانند تابع ()clrscr عمل می کند . البته بعضی از دوستان از کد ;("system("cls به جای کد مذکور استفاده می کنند . اشتباه نکنید، چنانچه به توضیحات دستورات Command Line مراجعه نمایید، مشاهده می کنید که این دستور (یعنی cls) علاوه بر پاک کردن صفحه، مکان نما را به ابتدای صفحه یعنی نقطه (0,0) می برد که شاید این امر مد نظر شما نباشد .
حال ممکن است این سوال را از خود بپرسید که این تابع شما بدون پارامتر بود، چنانچه بخواهیم تابعی مانند textcolor که در ++VC نیز وجود ندارد را پیاده سازی کنیم، چه باید انجام دهیم . ساده است . توسط آرگومان های خط فرمان می توان چنین امری را ممکن ساخت . مثلاً فرض کنید که بخواهیم فایلی به نام chngcol (مخفف change color) بنویسیم که دو پارامتر دریافت می کند . پارامتر اول رنگ متن و پارامتر دوم رنگ پس زمینه را مشخص می کند . هر پارامتر عددی بین صفر تا 15 می باشد که مشخص کننده یکی از 16 رنگ ممکن در محیط اجرای برنامه می باشد . کد زیر را در یکی از دو کامپایلر TC++ 3.0 یا BC++ 5.0 نوشته و فایل اجرایی ساخته شده را مانند دفعه قبل به پروژه مربوط به ++VC منتقل نمایید .
كد:
#include <conio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{ textcolor(atoi(argv[1]));
textbackground(atoi(argv[2]));
return 0;
}حال به جای کد های ;(textcolor(1 و ;(textbackground(6 در ++VC کد ;(spawnl(0,"chngcolor","1","6",0 را می نویسیم . امیدوارم که توانسته باشید، بفهمید چرا این کد ها را می نویسم و این کد ها چگونه عمل می کنند .
حال ممکن است سوال دیگری بپرسید . چنانچه فایل ما خروجی داشته باشد، چگونه در ++VC خروجی فایل را دریافت کنیم و یا چنانچه پارامتر های ورودی ما تعداد مشخصی نداشته باشند، چگونه عمل کنیم . باز هم ساده است . اما این دفعه مجبوریم از فایل ها استفاده کنیم . مثلاً فرض کنید می خواهیم فایلی بسازیم که چندین عدد را گرفته و جمع آنها را محاسبه کرده و جمع آنها را در اختیار ما قرار دهد . البته این فقط یک مثال ساده است و منظور از این مثال شیوه کار با چنین فایل هایی است . ابتدا در برنامه ++VC یک فایل ساخته و پارامتر ها ورودی فایل مربوط به کامپایلر های دیگر را در آن قرار می دهیم (در اینجا اعدادی که می خواهیم جمع شوند را در آن فایل قرار می دهیم) . سپس در برنامه آن کامپایلر ها یک جریان ورودی ساخته و فایل مربوط به کامپایلر ++VC را باز کرده و اعداد را خوانده و جمع می کنیم و نتیجه را در یک فایل دیگر و یا همان فایل قرار می دهیم . سپس در برنامه ++VC فایل برنامه TC++ 3.0 یا BC++ 5.0 را توسط تابع spawnl اجرا کرده و پس از آن یک جریان دیگر ساخته و فایل خروجی آن برنامه را باز کرده و نتیجه را می خوانیم . البته همانطور که گفته شد این فقط یک مثال بود و در عمل نیز کمتر به چنین توابعی نیازمندیم اما یکی از نحوه های برخورد با چنین توابعی به همان صورت می باشد که گفته شد . بنده سعی کردم خیلی ساده نحوه استفاده از توابع کامپایلر های TC++ 3.0 و یا Borland C++ 5.0 را در Visual Studio 2005 توضیح دهم و امیدوارم که نحوه برخورد با این مسائل را درک کرده باشید و فهمیده باشید که عموماً چگونه توابعی را می توان به این صورت استفاده کرد .
یا علی
حق نگهدارتون

مهندس 1
پنج شنبه 22 اسفند 1392, 12:57 عصر
سلام نحوه اجرای دستور ()sleepبرای فرایند پدر را میخواستم.