دروس
تخاطب البرامج بإستخدام الـ pipe

عقارية المدينة 6-12-1430هـ للاعلان جوال 0507445115 حراج سيارات 19-4-1431هـ
افضل و اقوى و احلى و اجمل موقع افلام و فيديو يوتيوب youtube على الاطلاق للاعلان جوال 0507445115 بنات الرياض سعوديات نسائي بناتي حريمي

تابع حالة الطقس في اكبر و اشهر مدن المملكة العربية السعودية | منتديات | مقاطع فيديو تحميل افلام موقع يوتيوب youtube العاب بنات hguhf fkhj | تحميل صور jpldg w,v | بلاك بيري | بنات السعودية | قصص بنات

احصائيات سريعة
اقسام على الموقع
دروس في أنظمة التشغيل | ماي سكيول - MySQL | لفيجوال بيسك - Visual Basic | المات لاب Matlab | اللينكس و اليونكس | الاسمبلي - ASSEMBLY | الاوتلوك - Outlook | البرمجة تحت اللنكس -Linux Programming | البرمجة تحت وندوز بواسطة دوال ال win API | البرمجة في بيئة الدوت نت .Net | التصمبم والرسوم | الدلفي - Delphi | الجافا - Java | السي - C | الصوت و الصورة | الوورد - Word | القسم العام للأوفيس | الكوبول - COBOL | control panel-ftp | اوراكل - Oracle | اكسل - Excel | تحميل الملفات | برامج متنوعة | برامج التصفح | برامج الحماية | برامج إنترنت | تعرّف على الويب | بوربوينت - Power Point | images | دروس : كمبيوتر وصيانة | دروس مجلة نيوك phpnuke | دروس مسنجر MSN - yahoo - Gmail | دروس منتديات vBulletin | دروس الجوالات والهواتف | دروس السي بنل cpanel | دروس اكسس access | دروس بيونت شوب برو - point shop pro | دروس برمجة php - mysql | دروس برامج منوعة software | دروس ثري دي ماكس 3D max | دروس تطوير المواقع والمنتديات | دروس جافا سكريبت JavaScript | دروس دريم ويفر DreamWeaver | دروس شبكات Networks | دروس سويش - swish | دروس فلاش - flash | دروس فلاش mx | دروس فى نظام الوندوز WINDOWS | دروس فىالباسكال - Pascal | دروس فيجوال بيسك Visual Basic | دروس فرونت بيج - frontpage | دروس فوتوشوب photoshop | دروس هكر hacker crack virus | سي ++ | سي شارب - #C | فيجوال سي ++ - ++ Visual C | قسم البرمجة العام | دروس فى لغة HTML
البحث في المواد

اكثر المحتويات زيارة
الدوال في الاكسل (14,836 مشاهده)
تعريف الفن التشكيلي: (14,801 مشاهده)
ربط قاعدة بيانات أكسس (MS Access) مع برنامج الفيجوال بيسك بطريقة(ODBC) (10,761 مشاهده)
دروس في الأوفيس الأكسس - Access0- (10,234 مشاهده)
أنواع العلاقات وطريقة الربط بين الجداول. (10,165 مشاهده)
شرح طريقة استعمال الأوتلوك مع بريد الهوتميل (7,341 مشاهده)
تغيير لغة واجهة التطبيق من عربي الى انجليزي وبالعكس لـ Windows-based applications (7,335 مشاهده)
ما هي شبكة الانترنت: (6,452 مشاهده)
الدرس الثالث : بعض تطبيقات الدوال في اكسل (6,207 مشاهده)
تعريف الاستعلام وطريقة عرضه في آكسس، أنواع الاستعلامات، نافذة تحديد الاستعلام! (6,189 مشاهده)
اضافه صوت ونص لخلفيه في باور بوينت (6,180 مشاهده)
المنظور الفوتوغرافي Perspective Drawing (6,128 مشاهده)
ما هو برنامج الاكسل -00 (5,994 مشاهده)
أنشئ قاعدة بياناتك التي ستستند إليها في تعلم طريقة ربط الجداول والاستعلامات. (5,752 مشاهده)
الدرس الثاني : عمل خلفيات ملونة لشرائح (5,533 مشاهده)
نظام التشغيل (Windows) (5,526 مشاهده)
الدرس الأول : عمل شريحة في البوربوينت (5,431 مشاهده)
الدرس الثاني: بعض الحيل لتسهيل برنامج اكسل (5,426 مشاهده)
لإجراء العمليات الحسابية (4,946 مشاهده)
مقدمة عامة حول الاكسل وحيل خاصة بالاكسل0-- (4,914 مشاهده)
دورة الأكسس: الدرس السادس : منوعات في أكسيس .0--- (4,870 مشاهده)
كيفية تنصيب Turbo C++ وتشغيل برنامج بلغة السي عليه!- (4,829 مشاهده)
vالدرس الأول : عمل شريحة في البوربوينت (4,819 مشاهده)
الدرس الثالث: كيفية عمل مراحل انتقالية للشرائح (4,810 مشاهده)
اضافة الحركات للصور والنصوص (4,744 مشاهده)
جديد مواد مع عشوائي
التحويل التلقائي للحروف ل- ل- ه إلى اسم الجلالة0---- (2,360 مشاهده)
النسبة المئوية لا تظهر بالخط العربي & الشدة وألف المد في لفظ الجلالة0---النسبة المئوية لا تظهر بالخط العربي & الشدة وألف المد في لفظ الجلالة0--- (1,776 مشاهده)
ضبط خيارات اللغة فى الـ Microsoft Word0--- (2,190 مشاهده)
استخدام لوحة المفاتيح في الـ Word0---- (2,383 مشاهده)
إضافة كلمة سر إلي ملفات الورد دون استخدام برامج0--- (2,320 مشاهده)
دمج المراسلات0-- (1,428 مشاهده)
وضع صورة كخلفية للنص0-- (1,870 مشاهده)
السماح للمستخدمين بتعديل أجزاء من ملف وورد محمي (Word2003)0--- (1,447 مشاهده)
كتابة الأرقام الكسرية ورموز المعادلات0-- (2,057 مشاهده)
درس كامل عن الدمج السهل من لوحة المفاتيح ف0-ي برنامج الـ Word (1,612 مشاهده)
دورة الأكسس: الدرس السادس : منوعات في أكسيس .0--- (4,870 مشاهده)
دورة الأكسيس : الدرس الرابع : العلاقات0---- (2,661 مشاهده)
أساسيات في Access0--0 (2,376 مشاهده)
تصميم تقرير لطباعة البيانات0---- (2,233 مشاهده)
تصميم نموذج استعراض البيانات‏0--تصميم نموذج استعراض البيانات‏0-- (1,993 مشاهده)
تصميم نموذج إدخال‎ ‎البيانات0--- (2,240 مشاهده)
إنشاء قوائم خاصة باستخدام الماكرو(1)0-- (1,928 مشاهده)
خطوات إنشاء الماكرو في تذييل النموذج (2)0-- (1,440 مشاهده)
خطوات إنشاء الماكرو في تذييل النموذج (1)0- (1,510 مشاهده)
استعلامات SQL في Access - تعديل الجداول وإضافة الحقول0- (2,102 مشاهده)
استعلامات SQL في Access - تحديث البيانات الجدولية0-- (1,713 مشاهده)
الاستعلامات الإجرائية -4 (استعلام الحذف)0--- (1,169 مشاهده)
الاستعلامات الإجرائية -2 (استعلام الإلحاق)0--- (1,315 مشاهده)
تصميم تقرير لطباعة الإجمالي0--- (1,420 مشاهده)
استعلامات التحديد Select Query مع أمثله (1)0--- (1,876 مشاهده)
دروس > البرمجة تحت اللنكس -Linux Programming > تخاطب البرامج بإستخدام الـ pipe
اعلانات في الموقع على جميع الصفحات

تخاطب البرامج بإستخدام الـ pipe

بسم الله الرحمن الرحيم



 



 



تطرقنا في درسنا السابق إلى الدالة fork و إستخداماتها و تعلمنا كيف من الممكن أن ننشئ من برنامجنا الأصلي



برنامج إبن له Child, في درسنا اليوم سوف نتطرق إلى الدالة Pipe التي من خلالها سوف نجعل البرنامج و إبنه يتبادلون



الرسائل بينهم بواسطة ما يسمى بالـ pipe .



 



أولاً: ما هو الـ pipe ?



الـ pipe هو دالة - system call - في نظام التشغيل Linux/Unix و التي من شأنها تبادل المعلومات بين البرامج أو



 الـ Processes, سواء كان بين الأب و إبنه أو برنامج و برنامج آخر ...



و الـ pipe هو نظام نقل بيانات أحادي الإتجاه one-way, و يمكن القول أنها عبارة عن ملف مؤقت Temporary File



و التي من شأنها أن يكتب البرنامج الأول معلومات إلى البرنامج الثاني لكي يقرأها ... كما هو موضح في الرسم 1.1



 





 



 



و من الممكن إنشاء الـ pipe بإستخدام الدالة pipe  و التي تأخذ الشكل التالي:



int pipe(int fd[2]);



و نلاحظ أن الدالة تستقبل مصفوفة من عنصرين و اللذين يكونان بالشكل التالي:



fd[0] is for reading.



fd[1] id for writing.



و عند نجاح إستدعاء الدالة فإنها ترجع القيمة صفر و عند الخطأ -1 .



 



و لاكن عند المثال يتضح المقال, وقبل أن نأخذ هذا المثال سنتعرف على دالتين هما:



int read(int fd, void *buf, size_t count);



int write(int fd, const void *buf, size_t count);



و اللتان تقرآن و تكتبان في الـ pipe, المتغير الأول نعطيه في الـ read المتغير [fd[0 و في الـ write نعطيه المتغير [fd[1.



أما المتغير الثاني فنعطيه أي شيئ سواء كان record أو متغير عادي و لكن لابد أن يكون مؤشر كما هو واضح



أو يكون مصفوفة ( طبعاً المصفوفة و المؤشر شيئ واحد كما نعرف ).



و جميع الثلاثة دوال pipe, read and write توجد في المكتبة:



unistd.h



 



و الآن لنأحذ المثال التالي:



 



#include <unistd.h>



#include <stdio.h>



int main( )



{



int fd[2];                                   /* descriptors for the pipes  */



char buf[1];                                /* buffer to be used for read and write */



if (pipe(fd) == -1)



   perror("error creating a pipe");



else



{



switch(fork())



{



case –1:



              perror("error creating a child");



break;



case 0:                                   /* child process is a pipe reader */



              close(fd[1]);            /*Close pipe write end */



              read(fd[0], (char)buf, 1);    /* read pipe into buf */



              printf("%c \n", buf[0]);  /* print contents of buf */



break;



default:                                 /*parent process is pipe writer */



              close(fd[0]);           /*Close read end */



              write(fd[1], 'a', 1);     /* write pipe into buf */



break;



} /* end of switch */



} /* end of else */



}



 



لشرح هذا المثال:



في الأول هذا برنامج بسيط يرسل الأب إلى الإبن الحرف a و يطبعة الإبن.



عرفنا المتغير fd من نوع int كمصفوفة من متغيرين للـ pipe ثم عرفنا المتغير buf من نوع char و مصفوفة من عنصر



واحد ( تذكر المصفوفة هي مجرد تمثيل بإستخدام المؤشرات ).



ثم أنشأنا الـ pipe  و تأكدنا أنه لم يرجع سالب واحد ( أي لايوجد فيه أخطاء ).



الآن عملنا fork طبيعية كما درسنا في الدرس السابق.



 



في جزء الإبن: case 0 ...



سوف نغلق طرف الكتابة في الإبن لأننا سوف نقرأ ثم نصل إلى الجملة:



read(fd[0], buf, 1); 



 



عندها يقف الإبن في إنتظار أن يكتب له ...



الآن في الجزء الخاص بالأب سنغلق طرف القراءة لأننا سوف نكتب في الـ pipe و سوف نكتب للأبن الحرف a في



طرف الكتابة [fd[1 الآن الإبن سوف تصله هذه الرسالة و سوف يقرأها من طرف القراءة [fd[0 و يخزنه في المتغير



buf ثم سنطبع المتغير buf و ستجد أنه الحرف a .



 



طبعاً من الممكن أن نغير قليلاً في البرنامج لنجعله يقرأ سلاسل حرفية أو حتى سجلات Structures .



 



في درسنا هذا درسنا فقط الـ Low level Piping أما الـ High level Piping فهو شبيه جداً بالملفات ربما نتطرق



إليه في درس آخر.



 



الآن يمكنك التعديل على البرنامج السابق لعمل أشياء كثيره جداً لتقسيم المهام بين الاب و الابن ثم التراسل



فيما بينهم.



 



و إن شاء الله سوف نتطرق في درسنا القادم إلى دوال الـ exec family .



 



هذا و الله أعلم ...



 



تحياتي طلال السبيعي.



 

درس تخاطب البرامج بإستخدام الـ pipe

أضف هذه المادة في موقعك:
مواد مشابهة:
الدرس السابع: كتابة الدوال والبرامج الدرس السابع: كتابة الدوال والبرامج
الدرس السابع: كتابة الدوال والبرامج
(مرات المشاهدة: 1,643 مرات)
مقدمة في البرمجة تحت لنكس بلغة سي و طريقة إستعمال المترجم gcc مقدمة في البرمجة تحت لنكس بلغة سي و طريقة إستعمال المترجم gcc
مقدمة في البرمجة تحت لنكس بلغة سي و طريقة إستعمال المترجم gcc
(مرات المشاهدة: 2,238 مرات)
About
جميع الحقوق في هذا الموقع محفوظة وكل المواد على الاقسام ملك لاصحابها :Copyright © All rights reserved