Rasm 3.22 Rasm 3.21, davom etdi.
bajarilgan tomonidan birinchi ishga tushirish the XAVFSIZLIK ATRIBUTLARI tuzilmasi uchun tutqichlarni meros qilib olishga ruxsat bering va keyin bola jarayonining tutqichlarini standartga yo'naltiring kiritish yoki standart chiqish uchun the o'qing yoki yozish tutqich ning the quvur. Bola quvurdan o'qiyotganligi sababli , ota-ona bolaning standartini qayta yo'naltirishi kerak kiritish uchun the o'qing tutqich ning the quvur. Bundan tashqari, kabi the quvurlar bor yarim dupleks, bu hisoblanadi zarur uchun taqiqlamoq the bola dan meros olish the yozish oxiri ning the
#o'z ichiga oladi < stdio.h > #include < stdlib.h > #include < windows.h >
#aniqlash BUFFER SIZE 25 int asosiy (VOID)
{
QO'LLANISH ReadHandle, WriteHandle; STARTUPINFO si;
JARAYON MA `LUMOT pi;
char xabar [BUFFER SIZE] = "Salomlar"; DWORD yozilgan;
/* Dastur davom etadi ichida Rasm 3.24 */
Rasm 3.23 Windows anonim trubkasi - ota-ona jarayoni.
quvur. The dastur uchun yaratmoq the bola jarayon hisoblanadi o'xshash uchun the dastur ichida 3.10- rasm , bundan mustasno, beshinchi parametr TRUE ga o'rnatiladi , bu bola jarayon ota-onasidan belgilangan tutqichlarni meros qilib olishdir. Quvurga yozishdan oldin, the ota-ona birinchi yopiladi uning foydalanilmagan o'qing oxiri ning the quvur. Bola buni qayta ishlash o'qiydi dan the quvur hisoblanadi ko'rsatilgan ichida Rasm 3.25. Oldin o'qish dan the quvur, bu dastur oladi the o'qing tutqich uchun the quvur tomonidan chaqirish GetStdHandle() . E'tibor bering, oddiy quvurlar ota-onani talab qiladi - ikkala UNIX da aloqa jarayonlari o'rtasidagi bolalar munosabatlari va Windows tizimlari. Bu shuni anglatadiki bular quvurlar mumkin bo'l ishlatilgan faqat uchun aloqa orasida jarayonlar yoqilgan the
bir xil mashina.
Nomlangan Quvurlar
Oddiy quvurlar bir juft jarayonlarni muloqot qilish imkonini beradigan oddiy mexanizmni ta'minlaydi. Biroq, oddiy quvurlar faqat jarayonlar aloqa qilganda mavjud bilan bitta boshqa. Yoniq ikkalasi ham UNIX va Windows tizimlari, bir marta jarayonlar bor muloqotni tugatdi va bor tugatilgan, oddiy quvur mavjud bo'lishni to'xtatadi.
Nomlangan quvurlar ta'minlaydi ancha kuchli aloqa vositasi. Aloqa mumkin bo'l ikki tomonlama, va yo'q ota-ona - bola munosabat hisoblanadi talab qilinadi. Nomlangan quvur o'rnatilgandan so'ng, bir nechta jarayonlar uni aloqa uchun ishlatishi mumkin. Darhaqiqat, odatiy stsenariyda nomlangan quvurda bir nechta yozuvchilar mavjud. Bundan tashqari, nomli quvurlar aloqa jarayonlari tugagandan so'ng mavjud bo'lib qoladi. Ikkalasi ham UNIX va Windows tizimlari qo'llab-quvvatlash nomli quvurlar, garchi tafsilotlar ning amalga oshirish farq qiladi juda. Keyingisi, biz kashf qiling nomli quvurlar ichida ushbu tizimlarning har biri.
Nomlangan quvurlar bor havola qilingan uchun kabi FIFO kiradi UNIX tizimlari. Bir marta yaratilgan, ular paydo bo'ladi kabi tipik fayllar ichida the fayl tizimi. A FIFO hisoblanadi yaratilgan bilan the mkfifo() tizimi chaqiruvi va oddiy open() , read() , write() va bilan boshqariladi yaqin() tizimi qo'ng'iroqlar. Bu bo'ladi davom eting uchun mavjud qadar bu hisoblanadi aniq o'chirildi
/* o'rnatish yuqoriga xavfsizlik atributlar ruxsat berish quvurlar uchun bo'l meros qilib olingan */ XAVFSIZLIK ATRIBUTLAR sa = { sizeof(XAVFSIZLIK ATRIBUTLAR),NULL,TRUE } ;
/* ajratish xotira */ ZeroMemory(&pi, sizeof(pi));
/* yaratmoq the quvur */
agar (! CreatePipe (&ReadHandle, &WriteHandle, &sa, 0)) {
fprintf(stderr, "Yaratmoq Quvur Muvaffaqiyatsiz"); qaytarish 1;
}
/* o'rnatish the MA'LUMOTNI BOSHLASH tuzilishi uchun the bola jarayon */ GetStartupInfo(&si);
si.hStdOutput = GetStdHandle (STD Chiqish HANDLE);
/* yo'naltirish standart kiritish uchun the o'qing oxiri ning the quvur */ si.hStdInput = ReadHandle;
si.dwFlags = STARTF USESTDHANDLES;
/* qilmang ruxsat berish the bola uchun meros the yozish oxiri ning quvur */ SetHandleInformation (WriteHandle, BAYROQNI MEROS ETISH, 0);
/* yaratmoq the bola jarayon */ Yaratish jarayoni (NULL, "child.exe", NULL, NULL,
TO'G'RI, /* meros tutqichlar */ 0, NULL, NULL, &si, &pi);
/* yaqin the foydalanilmagan oxiri ning the quvur */ CloseHandle (ReadHandle);
/* the ota-ona yozadi uchun the quvur */
agar (!WriteFile(WriteHandle, xabar,BUFFER O'lchami,&yozilgan,NULL)) fprintf(stderr, "Xato yozish uchun quvur.");
/* yaqin the yozish oxiri ning the quvur */ CloseHandle (WriteHandle);
/* Kutmoq uchun the bola uchun Chiqish */ WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread);
qaytish 0;
}
Dostları ilə paylaş: |