برای ساده
شدن بحث، فرض
کنید میخواهیم
برنامهای
بنویسیم که
جملاتی را
دریافت، و
حروف کوچک آن
را بزرگ کند. گرچه
این برنامه
بسیار
ابتدایی است
اما برای بحث
ما مناسب است. یک
شیوه طراحی
چنین برنامهای
این است که،
یک آرگومان برای
نام فایل
ورودی درنظر
بگیریم و یک
آرگومان نیز
برای فایل
خروجی. سپس
برنامه آرگومانها
را بررسی و
کار خود را
انجام دهد. اگر
آرگومانها
پاس نشدند، یا
اشتباه پاس شدند
برنامه پیغام
خطا خواهد داد
و اجرا متوقف
میشود. بد
نیست!
اما شیوه خوب
طراحی (که
شاید به نظر
بسیار بد
بیاید)، این
است که برنامه
ورودیهایش
را از stdin
بخواند،
خروجیش را در stdout
چاپ کند، و
خطاهای
احتمالی را در
stderr. روش خواندن
از stdin هم به گونهای
باشد که هرگاه
به EOF
رسید متوقف
شود. نیازی هم
به پشتیبانی
از فایل نیست!
اما اگر باشد
چه بهتر. مثال
ساده زیر،
همین کار را
میکند. فرض
کنید نام فایل
اجرایی my2upr[.exe] باشد.
my2upr.cpp |
---|
01: #include <iostream> 02: #include <string> 03: using namespace std; 04: 05: int main() 06: { 07: char szBuffer[1024]; 08: while(cin.getline(szBuffer, 1024)) 09: { 10: cout << strupr(szBuffer) << endl; 11: } 12: 13: return 0; 14: } |
خط ۸ موجب
خواندن خط به
خط از ورودی
تا زمان مشاهده
EOF میشود.
هنگام اجرای
برنامه برای
ایجاد EOF
در Windows
از Ctrl+Z و در UNIX از Ctrl+D
استفاده
کنید. خوب تا
اینجا ممکن
است این روش،
در مقایسه با
روش
آرگومانی، به
نظر افتضاح
بیاید. اما:
خواندن یک
فایل و مشاهده
آن در خروجی:
./my2upr < input.txt |
خواندن یک
فایل و ذخیره
خروجی در
فایلی دیگر:
./my2upr < input.txt > output.txt |
مشاهده
محتویات یک
فایل به حروف
بزرگ:
cat readme.txt | ./my2upr | less |
توضیح این که، < موجب میشود محتویات یک فایل به عنوان ورودی برنامه (یعنی به جای stdin) قرار گیرد. > خروجی برنامه (یعنی stdout) را به یک فایل منتقل میکند. پایپ نیز نتیجه اجرای برنامه قبل خود را به عنوان ورودی برنامه بعد خود قرار میدهد.
خلاصه این که، استفاده از این روش، قابلیتهای اسکریپتی بسیار زیادی به برنامه میبخشد. بسیاری از دستورات UNIX به همین شیوه طراحی شدهاند.
0 نظر:
ارسال یک نظر
جهت نمایش صحیح آدرس سایتتان، حتما قبل از آدرس //:http را درج کنید.