Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C] exit & wait

  1. #1

    [C] exit & wait

    codice:
    #include <stdio.h>
    #include <sys/wait.h>
    #include <unistd.h>
    
    main(int argc, char **argv)
    {
      int sono_il_padre;
      int figlio_defunto, status;
    
      sono_il_padre = fork();
    
      if (sono_il_padre) {
         figlio_defunto = wait(&status);
         printf("\n E` terminato il processo %d, lo stato e` %d\n",
            figlio_defunto, status);
         fflush(stdout);
      }
      else {
        printf("\n figlio: nasco e muoio"); fflush(stdout);
        exit(atoi(argv[1]));
           }
    }
    Sono esempi (ve ne proporrò una caterva, preparatevi...) di interazione fra processi, nel listato qui sopra non mi è chiaro (ho già fatto man exit..) perchè con exit 0 status valga 0 e

    exit=1 -> status=256
    exit=2 -> status=512
    exit=3 -> status=768

    non colgo il legame fra le coppie di valori... (a dire il vero non colgo nemmeno l'utilità del programma :gren: )..

    Mi ero fermato al fatto che se un programma/processo termina e ritorna 0 è tutto ok, per i valori restituiti (-1, 1, 2) a seconda del programma c'è una codifica del tipo di errore, questa è la mia esperienza delle applicazioni su unix.. Thanks

  2. #2
    exit=1 -> status=256
    exit=2 -> status=512
    exit=3 -> status=768
    Il nesso c`e` eccome. E cmq non e` casuale, su UNIX e` cosi`. Del parametro passato ad exit(), il valore di uscita e` memorizzato nel byte basso (i bits 0-7), mentre a seguito di una wait() esso viene memorizzato nel byte alto (8-15). Tutto sempre in riferimento alla parola bassa (0-15).

    Se ora rivedi in binario quei valori capirai tutto (spero):

    00000001 -> 00000001 00000000
    00000010 -> 00000010 00000000
    00000011 -> 00000011 00000000

    Ciao.

  3. #3
    Originariamente inviato da r0x
    Il nesso c`e` eccome. E cmq non e` casuale, su UNIX e` cosi`. Del parametro passato ad exit(), il valore di uscita e` memorizzato nel byte basso (i bits 0-7), mentre a seguito di una wait() esso viene memorizzato nel byte alto (8-15). Tutto sempre in riferimento alla parola bassa (0-15).

    Se ora rivedi in binario quei valori capirai tutto (spero):

    00000001 -> 00000001 00000000
    00000010 -> 00000010 00000000
    00000011 -> 00000011 00000000

    Ciao.
    ok, ci sono, mi sembra un po' machiavellico (sono abituato a linguaggi un po' + "alti") ma ho capito...


    thx

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 © 2024 vBulletin Solutions, Inc. All rights reserved.