إعادة التوجيه في ++C

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 وكائنات تدفق أخري ألا وهي الملحقة باسم الملف في سطر الأوامر ولكن هذا التساوي يستلزم أن يكون الكائنات مشتقان من فئة تقبل التخصيص وهي بالفعل الفئات المذكورة .

التسميات: