The UNIX and Linux Forums  


Go Back   A UNIX és Linux Forums > Top Fórumok > Magas szintű Programozás
.
google unix.com



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

Reply
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Téma eszközök Keresés a téma Rate Thread Megjelenítési módok
  #1 (permalink)  
Old 06-16-2009
p00ndawg p00ndawg is offline
Regisztrált felhasználó
  
 

Join Date: Jun 2009
Hozzászólások: 8
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..
  #2 (permalink)  
Old 06-22-2009
lagigliaivan lagigliaivan is offline
Regisztrált felhasználó
  
 

Join Date: May 2008
Hozzászólások: 45
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?
  #3 (permalink)  
Old 06-28-2009
p00ndawg p00ndawg is offline
Regisztrált felhasználó
  
 

Join Date: Jun 2009
Hozzászólások: 8
Idézet:
Originally Posted by lagigliaivan View Post
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?
Én igen, mert én két villa, de én is akartam, hogy a switch-et.
  #4 (permalink)  
Old 06-30-2009
tetsujin tetsujin is offline
Regisztrált felhasználó
  
 

Join Date: Apr 2009
Hozzászólások: 4
Idézet:
Originally Posted by p00ndawg View Post

Kód:
pid = fork();
pid1 = fork();
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:

Kód:
if(pid | pid1 == 0)//process A
Ez a nyilatkozat, ha tényleg működik a három, a négy folyamatok: A, C és D:
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:

Kód:
{
    close(p[0]); 
    write(p[1], message, MSGSIZE);
    read(p[1], message, MSGSIZE);
    write(p[2], message, MSGSIZE);
}
p [2] inicializálatlan van. pipe () csak két file jellemzőket: p [0]A végén olvassa el a csövet, és p [1], A végére írjuk be a pipát.

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ő ().
  #5 (permalink)  
Old 06-30-2009
p00ndawg p00ndawg is offline
Regisztrált felhasználó
  
 

Join Date: Jun 2009
Hozzászólások: 8
Idézet:
Originally Posted by tetsujin View Post
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



Ez a nyilatkozat, ha tényleg működik a három, a négy folyamatok: A, C és D:
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 ...)



p [2] inicializálatlan van. pipe () csak két file jellemzőket: p [0]A végén olvassa el a csövet, és p [1], A végére írjuk be a pipát.

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ő ().
Igen, valóban kívánatos folyamatok A, B, és C kommunikál egymással, de én csak akartam cső üzenetet a-> b-> c. I didnt észre volna létre 4 folyamatokat.
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..
  #6 (permalink)  
Old 06-30-2009
tetsujin tetsujin is offline
Regisztrált felhasználó
  
 

Join Date: Apr 2009
Hozzászólások: 4
Idézet:
Originally Posted by p00ndawg View Post
Igen, valóban kívánatos folyamatok A, B, és C kommunikál egymással, de én csak akartam cső üzenetet a-> b-> c. I didnt észre volna létre 4 folyamatokat.
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?
Biztos. Az ok akkor zárják le az összesen négy folyamatok, mivel minden hívás fork () értéke kétszer: egyszer az eredeti folyamatot, és egyszer az újat. Szóval, miután az első lehívás fork (), van két folyamat - mindkettő az tovább, hogy a második fork ().

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.
  #7 (permalink)  
Old 07-01-2009
p00ndawg p00ndawg is offline
Regisztrált felhasználó
  
 

Join Date: Jun 2009
Hozzászólások: 8
Idézet:
Originally Posted by tetsujin View Post
Biztos. Az ok akkor zárják le az összesen négy folyamatok, mivel minden hívás fork () értéke kétszer: egyszer az eredeti folyamatot, és egyszer az újat. Szóval, miután az első lehívás fork (), van két folyamat - mindkettő az tovább, hogy a második fork ().

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.
oh OK Köszi, azt hiszem, most már értem. Van egy projekt, ha rosszul jön ki kell használni, néhány csövek és én ezt valóban betölti egyes my üres.

thanks again.
Reply

Könyvjelzõk

Téma eszközök Keresés a téma
Keresés a téma:

Részletes keresés
Megjelenítési módok Rate this thread
Rate this thread:

Posting szabályzat
Ön nem post new threads
Ön nem post válaszok
Ön nem post Csatolmányok
Ön nem szerkeszteni az üzeneteidet

BB kód van Be
Smilies vannak Be
[IMG] kód Be
HTML kód Ki
Trackbacks vannak Be
Pingbacks vannak Be
Refbacks vannak Be




Minden idő GMT -4. Az idő most 05:03 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Nyelvre lefordítva Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
A UNIX és Linux Fórum Tartalom Copyright © 1993-2009. Minden jog Reserved.Ad menedzsment RedTyger

Content Relevant URLs by vBSEO 3.2.0