بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
[/COLOR]
قد يكون لاحظ البعض مثلما سبق وأن لاحظت عملية تمرير متغيرات من بعض الأدوات
التي تعمل من خلال الـ
Terminal ..
- الكود:
-
[LEFT][COLOR="DeepSkyBlue"]
X1.exe BruteFroce | X2.exe
[/COLOR][/LEFT]
فنرى مثلاً أن البرنامج الأول قد قام بتوليد
BruteFroce ثم قام بتشغيل البرنامج الثاني وتمرير سلسلة الـ
BruteForce إليه مرة تلو الأخرى
كما يحدث في بعض برامج توليد الإحتمالات ..
تمنيت أن أحضر رابط
youtube يوضح القصد لكن مع الأسف الوايرلس خايس (
سيء)
أعتقد الإسم المتعارف عليه لهذه العملية هو الـ
pipelining وهو ما فكرت به أن أقوم بدمج أكثر من أداة برمجية تقوم كل منهما بمهمة معينة
فتقوم الأولى بتكوين النتيجة - مثلا - وتمررها إلى صديقتها التي تتولى مهمة العرض
وبأسهل الطرق و أبسطها ..
انتهت المقدمة
.
.
.
بسم الله نبدأ
سنقوم ببرمجة برنامجين بالـ
++C طبعًا ..
1 - استلام النتائج وعرضها .
2 - تكوين النتائج وتمريرها لأداة العرض .
أداة (
1) ليكن اسمها مثلاً (
Pipeoutput.cpp )
وهذا كودها
- الكود:
-
[LEFT][COLOR="DeepSkyBlue"]#include
#include
using namespace std;
int main(int argc,char* argv[]){[COLOR="Yellow"]
if(argc < 2) // إذا تم تمرير أقل من متغيرين فلن تكمل الأداة عملها و للعلم فإن المتغير الأول = اسم الأداة , والثاني ما يتم تمريره لها .[/COLOR]
return 0;
[COLOR="Yellow"]
cout << argv[1]; // عملية عرض المتغير أو البارامتر المستقبل .[/COLOR]
return 0;
}[/COLOR][/LEFT]
الآن ..
سنقوم ببرمجة الأداة التي تكون النتائج وتمررها لأداة العرض
ستقوم هذه الأداة بمهمتين ..
الأولى هي استقبال اسم أداة العرض
الثانية هي تكوين النتائج وتمريرها
سوف نستخدم دالة (
rand()) لتكوين نتائج عشوائية وتمريرها لأداة العرض
سوف نستخدم حلقة (
for) لتكرار تكوين النتائج العشوائية وتمريرها مرة تلو أخرى
سوف نستخدم نوع البيانات (
stringstream) لتحويل ناتج الـ
()rand من عدد صحيح (
int) إلى (
string)
سوف نستخدم دالة (
(system(string) لتشغيل أداة العرض عن طريق الـ
terminal .. ممررة إليه قيمة الـ
rand العشوائية لعرضها
أداة (
2) و التي أسميناها (
commandPrompt.cpp) سيكون كودها كالتالي :
- الكود:
-
[LEFT][COLOR="DeepSkyBlue"]#include
#include
#include
using namespace std;
int main(int argc,char* argv[]){
if(argc <= 1 )
return 0;
string PassingToLine ;
PassingToLine = argv[1];
for(int Counter = 0 ; Counter <= 10 ; Counter++)
{
string QuickTemp,PassingToLineTemp = PassingToLine;
stringstream ConvertIntegerToString;
ConvertIntegerToString << rand();
ConvertIntegerToString >> QuickTemp;
PassingToLine += " ";
PassingToLine += QuickTemp ;
cout << QuickTemp;
system(PassingToLine.c_str());
PassingToLine = PassingToLineTemp;
}
return 0;
}
[/COLOR][/LEFT]
الآن .. سوف نضع الأداتين في مجلد واحد ونقوم بترجمة كل منهما على حدة .. ثم نشغلهما بالأمر التالي
- الكود:
-
[LEFT][COLOR="DeepSkyBlue"]commandPrompt.exe Pipeoutput.exe[/COLOR][/LEFT]
ليكون الناتج ..
- الكود:
-
[LEFT][COLOR="DeepSkyBlue"]C:\tools\CommandPrompt>[COLOR="Yellow"]commandPrompt.exe Pipeoutput.exe[/COLOR]
[COLOR="Red"]41411846718467633463342650026500191691916915724157241147811478293582935826962269
62244642446457055705[/COLOR][/COLOR][/LEFT]
[COLOR="DeepSkyBlue"]إلى هنا انتهى الدرس