![]() |
|
|
google unix.com
|
|||||||
| Fórumok | Regisztráció | Fórum Szabályok | Linkek | Albumok | GYIK | Tagok listája | Naptár | Keres | Mai hozzászólások | Megjelöl Fórumok Olvas |
| Magas szintű Programozás Post kérdések C, C + +, Java, SQL, és más programozási nyelvek itt. |
Több, UNIX és Linux fórum témák Ön által talált Hasznos
|
||||
| Szál | Thread Starter | Fórum | Válaszok | Utolsó hozzászólás |
| URGENT::: Tud valaki segíteni megteremtésében üzenetsor kérelem? | arunchaudhary19 | Magas szintű Programozás | 9 | 11-20-2007 07:15 AM |
| létrehozásának folyamata 10 | kpkant123 | Shell programozás és Scripting | 2 | 05-21-2007 06:28 PM |
| gyermek létrehozásának folyamata | Összezavarhatja | Magas szintű Programozás | 12 | 05-27-2005 12:48 PM |
| Átirányítás, vagy csővezeték hibaüzenet | tengerész | Shell programozás és Scripting | 2 | 05-10-2005 04:04 PM |
| Hogyan tudja egy új fájlt a létrehozásának folyamatában? Nem volt zárva. | linkjack | Magas szintű Programozás | 2 | 02-11-2003 01:55 PM |
![]() |
|
|
LinkBack | Téma eszközök | Keresés a téma | Rate Thread | Megjelenítési módok |
|
|
|
||||
|
Creating 3 folyamatot és csövek üzenet
im nagyon sajnálom, hogy ezt az új, de feltételezi, hogy 3 folyamatok A, B, C és a közvetlen kapcsolat a B, B és C, valamint C és a. Itt van a kód. Ez nem működik, azonban ha megnéz, amit vastagon, amíg az utolsó olvasott p [0] úgy tűnik, hogy mindig működik, függetlenül attól, hogy a vastagon szedett részt. tud akárki magyarázza ezt? Kód:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#define MSGSIZE 14
char *message = "hello, world!";
main() {
char inbuf[MSGSIZE];
int p[3];
pid_t pid;
pid_t pid1;
if (pipe(p) == -1){
perror("pipe call");
exit(1);
}
pid = fork();
pid1 = fork();
if(pid == -1){
perror("Fork failed");
exit(1);
}
if(pid | pid1 == 0)//process A
{
close(p[0]);
write(p[1], message, MSGSIZE);
read(p[1], message, MSGSIZE);
write(p[2], message, MSGSIZE);
}
/*else if(pid1 == 0){
close(p[1]);
//read(p[1], message, MSGSIZE);
write(p[2], message, MSGSIZE);
}*/
else{
//parent process C
close(p[2]);
read(p[0], inbuf, MSGSIZE);
printf("Pipelined message return:%s\n", inbuf);
wait(NULL);
}
exit(0);
}
Last edited by vino; 06/17/2009 at 01:52 AM.. |
|
||||
|
Szia
Nem értem, nagyon jó ez a béke a kódot írta: Kód:
if(pid | pid1 == 0)//process A Ez működik Kód:
if ( pid | (pid1 == 0) ) és én nem értem, igazából mi is az az ötlet, hogy tisztázzák az? A fenti kód egy vagy művelet, és ha a mondat lesz elvégezni az eredménye nem? ---------- Post frissíteni 05:18 ---------- Előző frissítés volt 05:16 ---------- Nem értem, nagyon jó ez a darab kódot írta: if (pid | pid1 \u003d\u003d 0) / / A folyamat Ez működik if (pid | (pid1 \u003d\u003d 0)) és én nem értem, igazán jól, hogy ez az ötlet, akkor lehet tisztázni, hogy? A fenti kód egy vagy művelet, és ha a mondat lesz elvégezni az eredménye, igaz? |
|
||||
|
Idézet:
|
|
||||
|
OK, először ki, akkor a teljes négy folyamatok, és nem három ... (Ez az, amit akart? A folyamatot hívom A ívik le, hogy három gyermek? Vagy nem akarsz három folyamatok teljes?)
A folyamat (eredeti folyamat): pid \u003d B, C \u003d pid1 Process B (első gyermeke A): pid \u003d 0, pid1 \u003d D Process C (második gyermeke A): pid \u003d B, pid1 \u003d 0 Process D (gyermek B): pid \u003d 0, pid1 \u003d 0 Idézet:
A folyamat: (pid | pid1 \u003d\u003d 0) \u003d (B | C \u003d\u003d 0) \u003d (B | 0) \u003d true Process B (pid | pid1 \u003d\u003d 0) \u003d (0 | D \u003d\u003d 0) \u003d (0 | 0) \u003d false Process C: (pid | pid1 \u003d\u003d 0) \u003d (B | 0 \u003d\u003d 0) \u003d (B | true) \u003d true Process D: (pid | pid1 \u003d\u003d 0) \u003d (0 | 0 \u003d\u003d 0) \u003d (0 | true) \u003d true (ha IGAZ Valami nonzero értéke ...) Idézet:
Továbbá, a probléma leírása, ez úgy hangzott, mint amit akartál mindhárom kommunikál folyamatokat képes üzeneteket írni és fogadni üzeneteket, minden, a másik kettő a kommunikáció folyamatokat. Ez arra utal, meg kell, hogy legalább három csövek (három invocations a cső () az a szülő folyamat). Azt mondja: "legalább három csövek", mert ha ezek a folyamatok "összesítését, amelyek lehetővé teszik két folyamat lehet írni, hogy ugyanaz a fájl leíró volna kiszámíthatatlan eredményeket. (Using írni (), hogy írjon egy egységes, az egész üzenet lesz biztonságban - de ha az üzenet volt a nagy lehetőség, hogy az írni fog blokk várja az olvasó olvasni néhány adat arra - ebben az esetben azt hiszem, hogy ez lehetséges, a többi folyamatban van írj () nem zárja le a szerzés az első write () befejezi az üzenetet. (Nem biztos, hogy mégis. write () egy olyan rendszer, hogy így a kernel szinkronizálni ...) Ne feledje, hogy a cső () két fájlt hoz létre, de jellemzőcsoport csak egy cső. A cső végén egy bemeneti és egy kimeneti végén. A file-leíró kap a pipe () vagy csak olvasható, vagy írjon a csak - akkor sem írni és olvasni az ugyanazon fájl leíró, ha a file-leíró nyerték a cső (). |
|
||||
|
Idézet:
Van egyébként a Létrehozunk 3 folyamatokat? Mit szólnál egy módja annak, hogy csak a változó csövek kommunikál egymással? Köszi a fantasztikus bontást. Last edited by p00ndawg; 06/30/2009 at 10:29 PM.. |
|
||||
|
Idézet:
Létrehozásához összesen három folyamatok, győződjön meg róla, hogy csak villával kétszer. Ezt az ellenőrzést a visszatérési értéke fork (), hogy biztosan csak az a folyamat, amely villáját. Kód:
pid_b = fork();
if (pid_b == 0)
{
/* fork() returned 0, so this is the new process, which I call process B. */
pid_c = fork();
if (pid_c == 0)
{
/* This is process C... */
}
}
Nos, ha a kommunikációs csatornák csak egyszer kell olyan üzeneteket küldhetünk a B, és B küld üzeneteket a C, akkor zárja le valami ilyesmi: Kód:
pipe(channel_ab);
pid_b = fork();
if (pid_b > 0)
{
/* Process A... Send messages to B using channel_ab[1] */
close(channel_ab[0]);
write(channel_ab[1], msg, size);
} else if (pid_b == 0) {
/* Process B */
close(channel_ab[1]);
pipe(channel_bc);
pid_c = fork();
if (pid_c > 0)
{
/* Still process B. Receive messages from A using channel_ab[0], send messages to C using channel_bc[1]. */
close(channel_bc[0]);
msg_size = read(channel_ab[0], buffer, size);
write(channel_bc[1], msg, size);
} else if (pid_c == 0) {
/* Process C. Receive messages from B using channel_bc[0]. */
msg_size = read(channel_bc[0], buffer, size);
}
}
Persze vannak különböző hibaellenőrzés és a cucc, amit akarok oda, hogy nem az a fentiekből kiderül -, de ez az alap-ötlet. |
|
||||
|
Idézet:
thanks again. |
![]() |
| Könyvjelzõk |
| Téma eszközök | Keresés a téma |
| Megjelenítési módok | Rate this thread |
|
|