Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C] Linux: Fork()

  1. #1

    [C-Linux] Fork()

    Ciao ho un problema con il fork()
    con questo code
    codice:
    #vari include
    int status;
    int variabile = 0;
    
    int main()
    {
    int pid = fork();
    if (pid == 0)
    {
    variabile = 3;
    }
    else
    {
    wait(&status);
    cout << variabile;
    }
    }
    Il processo padre mi restituisce 0 invece io voglio che visualizzi 3
    Grazie x l'aiuto!
    http://e107plus.org
    Chi trova un amico,trova un tesoro, ma chi trova il tesoro se ne frega dell amico!!
    Prima di fare una cazzata pensaci

  2. #2
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    codice:
    #vari include
    
    int main()
    {
      // non c'è ragione per cui dovrebbero essere globali
      int status;
      int variabile = 0;
    
      int pid = fork();
    
      if (pid == 0) {
        // questo codice il padre non lo esegue, non lo sa che variabile vale 3
        variabile = 3;
      } else {
        wait(&status);
        variabile = 3;
        cout << variabile;
      }
    }
    Così visualizza 3.

    Se non ti piace così devi far si che il figlio comunichi il valore di variabile al padre usando un qualche sistema comunicazione tra processi tipo pipe, FIFO, memoria condivisa o chi più ne ha più ne metta.

  3. #3
    nn dovrebbe andare così.. poi nel codice l'ho semplificato infatti in quella variabile ci si mette un valore esterno cn la cin
    Pensavo all memoria condivisa.. ho cercato su google ma nn ci ho capito niente!! HELP ME! VVoVe:
    http://e107plus.org
    Chi trova un amico,trova un tesoro, ma chi trova il tesoro se ne frega dell amico!!
    Prima di fare una cazzata pensaci

  4. #4
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    nn dovrebbe andare così..
    Non dovrebbe andare così cosa? Come dovrebbe andare?

    poi nel codice l'ho semplificato infatti in quella variabile ci si mette un valore esterno cn la cin
    In quale variabile? I processi sono due, per cui le variabili "variabile" sono due. Quale leggi da cin?

    Pensavo all memoria condivisa..
    Quindi il tuo intento è effettivamente passare dati tra padre e figlio?

    Ho come il sospetto che tu non abbia capito tanto come funziona fork().

  5. #5
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    attenzione! non sono thread, sono processi! niente memoria condivisa, la fork duplica qualsiasi area di memoria. Tutte le variabili dopo fork hanno vita a sè stante.

    Se il figlio deve passare un valore di ritorno può farlo attraverso un

    return valore;

    nel padre lo recuperi con un

    valore=(status >> 8)&0xff;

    ovviamente solo valori tra 0 e 255.

    altrimenti se devi passare strutture più complesse usa una pipe.

    http://lia.deis.unibo.it/Courses/CalcEle2/processi.pdf

    http://lia.deis.unibo.it/Courses/CalcEle2/PipeFifo.pdf
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  6. #6
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    Originariamente inviato da Habanero
    niente memoria condivisa
    Perchè?

  7. #7
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    in che senso scusa?

    fork() non rende la memoria dati del padre condivisa con il figlio. Il figlio ne ottiene solo una copia.
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  8. #8
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263
    A ok, mi sa che parlavamno di due cose diverse, io intendevo memoria condivisa tra i processi, robe tipo shmget e parenti.

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    A meno di non utilizzare variabili con modificatore static...
    codice:
    #vari include
    int status;
    static int variabile = 0;
    
    int main()
    {
    int pid = fork();
    if (pid == 0)
    {
    variabile = 3;
    }
    else
    {
    wait(&status);
    cout << variabile;
    }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Alla fine ho utilizzato un'area di memoria condivisa fra i due processi e poi ho usato 1 puntatore!!! GRAZIE!
    http://e107plus.org
    Chi trova un amico,trova un tesoro, ma chi trova il tesoro se ne frega dell amico!!
    Prima di fare una cazzata pensaci

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.