إعادة التوجيه في ++C
البرامج التالية يتم تشغيلها من محث الدوس يمكن كتابة وقراءه بيانات للملفات عن طريق كل من cin , cout والمعرفين أصلا ليتعاملا مع الشاشة ولوحة المفاتيح . ولكن هذان الكائنان قابلين أيضا لإعادة التوجيه لكي تمثل ملفا لقرص . وإعادة اللغة ذاتها , ومن المثير أن نري كيف يعمل . إليك أولا البرنامج التالي .
redir.cpp
// redir.cpp
// demonstrates redirection
// syntax: redir <source >destination
#include <iostream.h>
#include <iomanip.h> // for resetiosflags()
#include <conio.h>
void main()
{
char ch;
while( !cin.eof() ) // quit on EOF
{
cin >> resetiosflags(ios::skipws) // keep whitespace
>> ch; // read from std input
cout << ch; // send to std output
}
getche();
}
وقد أبطلنا عمل الراية skipws حيث إن الوضع الابتدائي للكائن cin هو تجاوز المسافات البيضاء , والتي تتضمن المسافات ومحرف نهاية الملف , ونحن نريده أن ندخلها .
وباستخدام إعادة التوجيه يمكن أن تتوجه المدخلات إلي ملف مباشرة أو إظهار محتويات قرص علي الشاشة أو نسخ بيانات ملف في أخر .
إعادة توجيه المدخلات
يمكنك عند تشغيل البرنامج من محث الدوس أن توجهه مباشرة لملف ما باستخدام الرمز > , كالتالي :
c> redir >sanple.txt
If you would avoid suspicion,
Don't lace your shoes in a melon field
^z
ويمكنك أن تتأكد من كون العبارة قد نسخت علي الملف المذكور عن طريق الأمر type .
إعادة توجيه المخرجات
بإعادة توجيه المدخلات يمكنك أن تظهر علي الشاشة من ملف وليس من لوحة المفاتيح ,
فيمكنك تشغيل البرنامج التالي :
c>redir < sample.txt
وسوف تري أن محتويات الملف المذكور قد ظهرت علي الشاشة .
إعادة توجيه المدخلات والمخرجات
يمكنك عن طريق التشغيل بالصورة التالية أن تنسخ بيانات ملف في ملف أخر :
C< redir.txt <src.txt >dest.txt
ولن يظهر شئ علي الشاشة , ولكن محتويات ملف المصدر src.txt تنسخ في ملف الهدف dest.txt . وتجدر الملاحظة بأن هذه الإمكانية تستخدم مع الملفات النصية وليس الثنائية .
ولو أدرت في هذه الحالة أن تظهر المحتويات المتقولة بين الملفين , فبإمكانك إدخال الأمر التالي في دوارة البرنامج :
Cerr < ch;
فبينما يرسل cout البيانات من ملف لأخر , يقوم cerr بإظهار كل محرف علي الشاشة .
دور _withassign في إعادة التوجيه
إن الحاجة لإعادة التوجيه يفسر وجود الفئات _withassign , ذلك لأن إعادة التوجيه يتطلب أن يساوي بين الكائنين cin , cout وكائنات تدفق أخري ألا وهي الملحقة باسم الملف في سطر الأوامر ولكن هذا التساوي يستلزم أن يكون الكائنات مشتقان من فئة تقبل التخصيص وهي بالفعل الفئات المذكورة .
تعليقات
إرسال تعليق