The UNIX and Linux Forums  
Hallo en welkom van de Verenigde Staten aan de UNIX en Linux Forum! Bedankt voor uw bezoek en Deelnemen aan onze wereldwijde gemeenschap.

Go Back   De Unix-en Linux Forum > Top Forums > Hoog Niveau Programmering
.
google unix.com



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

Reply
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 06-16-2009
p00ndawg p00ndawg is offline
Geregistreerde gebruiker
  
 

Join Date: juni 2009
Posten: 8
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..
  #2 (permalink)  
Old 06-22-2009
lagigliaivan lagigliaivan is offline
Geregistreerde gebruiker
  
 

Join Date: mei 2008
Posts: 45
Hoi

Ik begrijp niet goed dat de vrede van de code die u heeft geschreven:

Code:
if(pid | pid1 == 0)//process A
Dit werkt als
Code:
 if ( pid | (pid1 == 0) )
en ik begrijp niet goed wat is de gedachte, zou kunnen verduidelijken?


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?
  #3 (permalink)  
Old 06-28-2009
p00ndawg p00ndawg is offline
Geregistreerde gebruiker
  
 

Join Date: juni 2009
Posten: 8
Citaat:
Oorspronkelijk geplaatst door lagigliaivan View Post
Ik begrijp niet goed dat de vrede van de code die u heeft geschreven:

Code:
if(pid | pid1 == 0)//process A
Dit werkt als
Code:
 if ( pid | (pid1 == 0) )
en ik begrijp niet goed wat is de gedachte, zou kunnen verduidelijken?


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?
ja ik deed dat omdat ik gecreëerd twee vorken, maar ik wilde zowel om de switch statement.
  #4 (permalink)  
Old 06-30-2009
tetsujin tetsujin is offline
Geregistreerde gebruiker
  
 

Join Date: april 2009
Posten: 4
Citaat:
Oorspronkelijk geplaatst door p00ndawg View Post
Code:
pid = fork();
pid1 = fork();
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:
Code:
if(pid | pid1 == 0)//process A
Dit als verklaring daadwerkelijk uitgevoerd voor drie van de vier processen: A, C en D:
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:
Code:
{
    close(p[0]); 
    write(p[1], message, MSGSIZE);
    read(p[1], message, MSGSIZE);
    write(p[2], message, MSGSIZE);
}
p [2] niet geïnitialiseerde. pijp () alleen bij tot twee file descriptors: p [0], Het lezen van de leiding, en p [1], Het schrijven eind van de pijp.

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 ().
  #5 (permalink)  
Old 06-30-2009
p00ndawg p00ndawg is offline
Geregistreerde gebruiker
  
 

Join Date: juni 2009
Posten: 8
Citaat:
Oorspronkelijk geplaatst door tetsujin View Post
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



Dit als verklaring daadwerkelijk uitgevoerd voor drie van de vier processen: A, C en D:
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, ...)



p [2] niet geïnitialiseerde. pijp () alleen bij tot twee file descriptors: p [0], Het lezen van de leiding, en p [1], Het schrijven eind van de pijp.

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 ().
ja ik eigenlijk wilde processen A, B en C te communiceren met elkaar, maar ik wilde alleen pijp een bericht van a-> b-> c. I didnt realiseer ik had gecreëerd 4 processen.
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..
  #6 (permalink)  
Old 06-30-2009
tetsujin tetsujin is offline
Geregistreerde gebruiker
  
 

Join Date: april 2009
Posten: 4
Citaat:
Oorspronkelijk geplaatst door p00ndawg View Post
ja ik eigenlijk wilde processen A, B en C te communiceren met elkaar, maar ik wilde alleen pijp een bericht van a-> b-> c. I didnt realiseer ik had gecreëerd 4 processen.
Is er toch iets te maken 3 processen? how about a way to just get variabele buizen communiceren met elkaar?
Zeker. De reden dat je wond met een totaal van vier processen komt omdat elke oproep tot bord () geeft twee keer: een keer in het oorspronkelijke proces en een keer in het nieuwe. Dus nadat je de eerste oproep tot splitsing (), zijn er twee processen - die beide door naar de tweede oproep fork ().

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... */
    }
}
Nu, als uw communicatie-kanalen alleen moeten zodanig zijn dat een berichten kan versturen naar B, en B-berichten kan versturen naar C, wind je met iets als dit:

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);
    }
}
'Er is natuurlijk verschillende fouten te controleren en zo je wilt doen in dat er is niet aangetoond boven - maar dat is het basisidee.
  #7 (permalink)  
Old 07-01-2009
p00ndawg p00ndawg is offline
Geregistreerde gebruiker
  
 

Join Date: juni 2009
Posten: 8
Citaat:
Oorspronkelijk geplaatst door tetsujin View Post
Zeker. De reden dat je wond met een totaal van vier processen komt omdat elke oproep tot bord () geeft twee keer: een keer in het oorspronkelijke proces en een keer in het nieuwe. Dus nadat je de eerste oproep tot splitsing (), zijn er twee processen - die beide door naar de tweede oproep fork ().

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... */
    }
}
Nu, als uw communicatie-kanalen alleen moeten zodanig zijn dat een berichten kan versturen naar B, en B-berichten kan versturen naar C, wind je met iets als dit:

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);
    }
}
'Er is natuurlijk verschillende fouten te controleren en zo je wilt doen in dat er is niet aangetoond boven - maar dat is het basisidee.
oh ok bedankt, ik denk dat ik begrijp nu. Ik heb een project komen waar zieken moeten gebruiken sommige pijpen en ik dit echt vult in sommige van mijn spaties.

nogmaals bedankt.
Reply

Bladwijzers

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 12:56.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0