Portál AbcLinuxu, 11. května 2025 10:29

Dotaz: C, nebo C++ a fork

26.3.2007 20:00 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
C, nebo C++ a fork
Přečteno: 2224×
Odpovědět | Admin
Nevíte někdo jak vytvořit v C/C++ fork tak, aby jeden rodič měl dva potomky? Zkouším to na něčem jako toto:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>


int main() {
        int roura[2];
        pipe(roura);
        int pid=fork();

        if(pid != 0) { // rodic
                close(roura[0]);
                int a = 10;
                write(roura[1],&a,sizeof(a));
//              close(roura[1]);
                printf("PID rodice: %d\n", getpid());
                printf("Potomek: %d\n", pid);
                int pid1=fork();
                if (pid1 == 0) {
                        int b = 312;
                        write(roura[1],&b,sizeof(b));
                        close(roura[1]);
                        printf("Potomek2-PID rodice: %d\n", getpid());
                        printf("Potomek2-Potomek: %d\n", pid);
                }
        } else { // potomek
                close(roura[1]);
                int a1, b1;
                read(roura[0],&a1,sizeof(a1));
                read(roura[0],&b1,sizeof(b1));
                close(roura[1]);
                printf("PID potomka: %d\n", getpid());
                printf("Potomek: %d\n", pid);
                printf("Soucet císel z roury je %d\n", a1 + b1);
        }
        return 0;
}
Roury mi fungují, ale nějak mi nesouhlasí PIDY:
PID rodice: 11731
Potomek: 11732
Potomek2-PID rodice: 11733
Potomek2-Potomek: 11732
PID potomka: 11732
Potomek: 0
Soucet císel z roury je 322
To vypadá jako by měl jeden potomek více rodičů?! Jak to má být správně?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Luboš Doležel (Doli) avatar 26.3.2007 20:55 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: C, nebo C++ a fork
Odpovědět | | Sbalit | Link | Blokovat | Admin
Máte tam řádný bordel v proměnných, v té větvi s pid1 používáte pid. A navíc v té větvi máte blbě podmínku (pid1 == 0).
26.3.2007 21:04 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: C, nebo C++ a fork
Odpovědět | | Sbalit | Link | Blokovat | Admin
Výsledek přesně odpovídá tomu, co jste naprogramoval. První tučný řádek vám ukáže PID původního procesu, druhý tučný řádek PID druhého potomka.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.