Rasm 3.20 Fayl tavsiflovchilar uchun a oddiy quvur.
#o'z ichiga oladi < sys/types.h > #include < stdio.h > #include < string.h > #include < unistd.h >
#aniqlash BUFFER SIZE 25 #aniqlash O'QING OXIRI 0 #aniqlash YOZING OXIRI 1
int asosiy (bo'sh)
{
char yozish msg[BUFFER SIZE] = "Salomlar"; char o'qing msg[BUFFER SIZE];
int fd[2]; pid t pid;
/* Dastur davom etadi ichida Rasm 3.22 */
Rasm 3.21 Oddiy quvur ichida UNIX.
fd massividagi fayl deskriptorlarining ota-ona va yordamchi jarayonlarga munosabati . Bundan ko'rinib turibdiki, har qanday ota-ona quvurning yozish uchiga yozadi— fd[1] - mumkin bo'l tomonidan o'qiladi bolani o'qish oxiridan boshlab — fd[0] - ning quvur .
In the UNIX dastur ko'rsatilgan ichida Rasm 3.21, the ota-ona jarayon yaratadi quvur va undan keyin bola jarayonini yaratish uchun fork() chaqiruvini yuboradi. Keyin nima sodir bo'ladi the vilka() qo'ng'iroq qiling bog'liq yoqilgan Qanaqasiga the ma'lumotlar bor uchun oqim orqali the quvur. In bu misol, ota-ona yozadi uchun quvur, va bola o'qiydi undan. Bu muhim uchun xabarnoma bu ikkalasi ham the ota-ona jarayon va the bola jarayon dastlab yaqin ularning foydalanilmagan tugaydi ning the quvur. Garchi the dastur ko'rsatilgan ichida Rasm
3.21 qiladi emas talab qiladi bu harakat, bu hisoblanadi a muhim qadam uchun ta'minlash bu a jarayonni o'qish dan the quvur mumkin aniqlash faylning oxiri ( o'qish() qaytadi 0) qachon the yozuvchi trubaning uchini yopdi.
Windows tizimidagi oddiy quvurlar anonim quvurlar deb ataladi va ular UNIX tizimidagi hamkasblariga o'xshash harakat qiladilar: ular bir yo'nalishli va foydalanadilar. ota-ona - bola o'rtasidagi munosabatlar aloqa jarayonlari. Bundan tashqari, trubaga o'qish va yozish oddiy ReadFile() va WriteFile() funksiyalari bilan amalga oshirilishi mumkin. Quvurlarni yaratish uchun Windows API to'rt parametrdan o'tgan CreatePipe() funktsiyasidir. Parametrlar _ ta'minlash alohida tutqichlar uchun (1) o'qish va (2) yozish uchun the quvur, kabi yaxshi kabi (3) a misol ning the STARTUPINFO tuzilishi, qaysi hisoblanadi ishlatilgan uchun shuni aniqlang the bola jarayon hisoblanadi uchun meros the tutqichlar ning the quvur. Bundan tashqari, (4) quvurning o'lchami (baytlarda) ko'rsatilishi mumkin.
3.23-rasmda ota-onaning bolasi bilan aloqa qilish uchun anonim truba yaratish jarayoni tasvirlangan. UNIX tizimlaridan farqli o'laroq , ularda bola ishlov beradi avtomatik ravishda meros oladi a quvur yaratilgan tomonidan uning ota-ona, Windows talab qiladi dasturchi uchun belgilang qaysi atributlar the bola jarayon bo'ladi meros. Bu hisoblanadi
/* yaratmoq the quvur */ agar ( quvur (fd) == -1) {
fprintf(stderr,"Quvur muvaffaqiyatsiz"); qaytarish 1;
}
/* sanchqi a bola jarayon */ pid = sanchqi();
agar (pid < 0) { /* xato sodir bo'ldi */ fprintf (stderr, "vilka Muvaffaqiyatsiz"); qaytarish 1;
}
agar (pid > 0) { /* ota-ona jarayon */
/* yaqin the foydalanilmagan oxiri ning the quvur */ yopish (fd[O'QIShI TUG'IRISH]);
/* yozish uchun the quvur */
yozish (fd[YOZ OXIRI], yozish xabar, strlen (yozing msg)+1);
/* yaqin the yozish oxiri ning the quvur */ yopish(fd[WRITE END]);
}
boshqa { /* bola jarayon */
/* yaqin the foydalanilmagan oxiri ning the quvur */ yopish(fd[WRITE END]);
/* o'qing dan the quvur */
o'qish (fd[O'QISh OXIRI], o'qing xabar, BUFFER SIZE); printf("o'qing %s",xabarni o'qing);
/* yaqin the o'qing oxiri ning the quvur */ yopish(fd[READ END]);
}
qaytish 0;
}
Dostları ilə paylaş: |