![]() |
Hallo en welkom van de Verenigde Staten aan de UNIX en Linux Forum! Bedankt voor uw bezoek en Deelnemen aan onze wereldwijde gemeenschap.
|
|
google unix.com
|
|||||||
| Forums | Registreer | Forum Regels | Links | Albums | Veelgestelde vragen | Ledenlijst | Kalender | Zoeken | Today's Posts | Markeer forums als gelezen |
| Hoog Niveau Programmering Post vragen over C, C + +, Java, SQL, en andere programmeertalen hier. |
Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
|
||||
| Draad | Thread Starter | Forum | Antwoorden | Last Post |
| URGENT::: Kan iemand me helpen bij het creëren van berichtwachtrij aanvraag? | arunchaudhary19 | Hoog Niveau Programmering | 9 | 11-20-2007 07:15 |
| het creëren van 10 proces | kpkant123 | Programmeren en Shell Scripting | 2 | 05-21-2007 05:28 PM |
| creëren kind proces | Verwarren | Hoog Niveau Programmering | 12 | 05-27-2005 11:48 |
| Redirect of installatieleidingen foutmelding | Mariner | Programmeren en Shell Scripting | 2 | 05-10-2005 03:04 PM |
| Hoe weet een nieuw bestand in proces van het creëren? Het is niet gesloten. | linkjack | Hoog Niveau Programmering | 2 | 02-11-2003 01:55 PM |
![]() |
|
|
LinkBack | Thread Tools | Zoeken in deze Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Creating 3 en leidingsystemen een bericht
sorry im erg nieuw voor dit maar ik ben te creëren 3 processen A, B en C en hebben een directe link van A naar B, B naar C en C naar A.
hier is mijn code. Het werkt wel, maar als je kijkt naar wat ik vet zolang mijn laatste lezen is p [0] lijkt te werken altijd, ongeacht het vet sectie. kan iemand dit uitleggen? Code:
#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);
}
Laatst gewijzigd door vino; op 06.17.2009 12:52 AM.. |
|
||||
|
Hoi
Ik begrijp niet goed dat de vrede van de code die u heeft geschreven:
Code:
if(pid | pid1 == 0)//process A Code:
if ( pid | (pid1 == 0) ) De bovenstaande code is een of de exploitatie en het als straf zal worden uitgevoerd overeenkomstig het resultaat toch? ---------- Post bijgewerkt op 05:18 PM ---------- Vorige update was op 05:16 uur ---------- Ik begrijp niet goed dit stuk code die u heeft geschreven: if (pid | pid1 \u003d\u003d 0) / / Een proces Dit werkt als if (pid | (pid1 \u003d\u003d 0)) en ik begrijp niet echt goed dat dit is het idee, kan je verduidelijken? De bovenstaande code is een of de exploitatie en het als straf zal worden uitgevoerd volgens haar resultaat, toch? |
|
||||
|
Citaat:
|
|
||||
|
OK, eerste start, heb je een totaal van vier processen hier niet drie ... (Is dat wat je wilde? Voor het proces dat ik een oproep om te paaien uitgeschakeld drie kinderen? Of heeft u drie processen totaal?)
Proces A (origineel proces): pid \u003d B, pid1 \u003d C Proces B (eerste kind van A): pid \u003d 0, pid1 \u003d D Proces C (tweede kind van A): pid \u003d B, pid1 \u003d 0 Proces D (kind van B): pid \u003d 0, pid1 \u003d 0 Citaat:
Proces A: (pid | pid1 \u003d\u003d 0) \u003d (B | C \u003d\u003d 0) \u003d (B | 0) \u003d true Proces B: (pid | pid1 \u003d\u003d 0) \u003d (0 | D \u003d\u003d 0) \u003d (0 | 0) \u003d false Proces C: (pid | pid1 \u003d\u003d 0) \u003d (B | 0 \u003d\u003d 0) \u003d (B | true) \u003d true Proces D: (pid | pid1 \u003d\u003d 0) \u003d (0 | 0 \u003d\u003d 0) \u003d (0 | true) \u003d true (waar WAAR is enige nonzero waarde, ...) Citaat:
Ook de beschrijving van het probleem het klonk alsof je wilde elk van de drie processen te communiceren over de mogelijkheid om berichten naar en ontvangen van berichten uit elk van de twee andere communicatie processen. Dit suggereert moet u ten minste drie leidingen (drie aanroepingen van de pijp () in de ouder-proces). Ik zeg "ten minste drie buizen" want als deze processen lopen gelijktijdig, waardoor twee processen te schrijven aan dezelfde file descriptor kan hebben onvoorspelbare resultaten. (Gebruik van schrijven () om een enkel, hele bericht zal waarschijnlijk veilig - maar als het bericht waren groot is het mogelijk de afschrijving zou blokkeren wachten voor de lezer om te lezen wat data uit - in welk geval ik denk dat het mogelijk is de andere proces's schrijven () kan liquideren krijgen voordat de eerste schrijven () apprets haar boodschap. (Niet zeker, hoewel. write () is een systeem bellen zodat de kernel mei synchronisatie ...) Vergeet niet dat pijp () creëert twee file descriptors maar slechts een pijp. Een pijp met een input en een output einde einde. Een file descriptor je uit buis () hetzij alleen-lezen of schrijven alleen - je kunt nooit lezen en schrijven van dezelfde file descriptor, wanneer de file descriptor werd opgehaald met pijp (). |
|
||||
|
Citaat:
Is er toch iets te maken 3 processen? how about a way to just get variabele buizen communiceren met elkaar? Thanks for the awesome verdeling. Laatst gewijzigd door p00ndawg; op 06.30.2009 09:29 PM.. |
|
||||
|
Citaat:
Als u een totaal van drie processen, zorg ervoor dat u alleen vork tweemaal. U kunt dit doen door het controleren van de return waarde van fork () om te zorgen dat u zich in het proces dat moet vork. Code:
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... */
}
}
Code:
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);
}
}
|
|
||||
|
Citaat:
nogmaals bedankt. |
![]() |
| Bladwijzers |
| Thread Tools | Zoeken in deze Thread |
| Display Modes | Beoordeel deze draad |
|
|