بروتكول ABP باستخدام التوصل خلال pipe (البي اي بي اة يكونن عبارة عن ملفات تستخدم لتبادل المعلومات بين العمليات التي تحصل في الكمبيوتر)(مثال على البي اي بي اة عندما نقوم بتحويل النتائج من احد الاوامر في نظام اليونكس الى احداى الملفات مثل ls >file out put هنا نتائج الامر تتحول الى الملف المحدد وبعد ذلك نستخدم نفس الملف لعمل عملية اخرى مثل الطباعة او البحث بواسطة grep )(مثال اخر الامر ls | grep filename الامر السابق يعمل فلترة يعني تنقية للنتائج ويعرض النتائح التى نريدها بس (يقوم بارسال نتائج الامر ls الى ملف البي اي بي اة ويقوم الامر grep باخذ نتائج الامر ls من البي اي بي اة ويقوم بعمل التنقية واظهار النتائج المطلوبة) )
البي اي بي اة تقوم با السماح بالتواصل بين عمليتان بالنظام اليونكس ,ABP (alternating bit protocol) يكون مرسل للبيانات البسيطة التى تكون مفقودة اثنا الارسال ,كل رسالة من أ الى ب تحتوي على جزئين البيانات و قيمة من البايت (1او 0) تسمى التاج او الملصق كوبالطرف الاخر ب يرسل الى أ رسالة تاكيد acknowledgement ما مع صفر او واحد ack0 or ack1 وبعد ذلك يقوم الطرف أ بارسال الرسالة بشكل مستمر الى ان يستقبل رسالة التاكيد من الطرف ب ثم يقوم الطرف أ بارسال الرسالة التالية
عندما يستقبل ب رسالة المفقودة وتحتوي على الصفر يقوم الطرف ب بارسال بارسال تاكيد من نوع صفر الى ان يستقبل رسالة غير صالحة مع الرقم 0 يقوم بارسال رسالة تاكيد من النوع 1 .
بالمرفقات يوجد برنامجين بلغة السي
قبل تشغيل البرنامجين يجب انشاء pipe باستخدام الاوامر التالية
mkfifo pipe1
mkfifo pipe2
receiver.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
//receiver
int main ()
{
char tag;
int fd1, fd2;
fd1 = open ( "pipe1", O_RDONLY );
fd2 = open ("pipe2", O_WRONLY);
char buf [100];
int p;
while(1) {
read ( fd1, buf, 100 );
p=strlen (buf);
printf ( "%s \n", buf );
tag = buf [p-1];
write (fd2, &tag, 1);
}
close (fd1);
close (fd2);
return 0;
}
sender.c
#include <stdio.h>
# include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
// sender
char * phrase = "Stuff this in your pipe and smoke it";
int main ()
{ int fd1, fd2;
char tag;
fd1 = open ( "pipe1", O_WRONLY );
fd2 = open ("pipe2", O_RDONLY);
int i;
for(i=0 ; i < strlen (phrase); i+=3) {
write (fd1, phrase+i, 3);
read (fd2, &tag, 1);
}
close (fd1);
close(fd2);
return 0;
}في المرفقات ملف تاكستي بنفس الشي المكتوب بالاعلى