Difference between revisions of "Esercizi con System Call"

From Sistemi Operativi
Jump to navigation Jump to search
Line 22: Line 22:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
 +
il programma stampa entrambi i risultati perché la system call fork() crea un processo figlio identico al padre, questa system call ha come valore di ritorno al thread padre il pid del processo figlio (che essendo diverso da 0 è true) e al thread figlio ritorna 0, quindi il processo padre riceve un valore diverso da 0 (pid del figlio) e stampa true, mentre il processo figlio riceve 0, non entra nel if e stampa, ovviamente false.

Revision as of 12:32, 3 November 2015

Questi programmi contengono esempi di uso delle System-Call.

Il consiglio e' di compilarli, provarli e capirne passo-passo il funzionamento. (o spiegare perche' non funzionino).

Ovviamente potete proporre ulteriori esempi. Renzo (talk) 08:03, 2 November 2015 (CET)

programma 0

Il gatto di Schrödinger: Fork e' vero o falso?

#include <stdio.h>
#include <unistd.h>

int main(int argc, char* argv[]) {
  if (fork())
    printf("fork is true\n");
  else
    printf("fork is false\n");
  usleep(100000);
  return 0;
}


il programma stampa entrambi i risultati perché la system call fork() crea un processo figlio identico al padre, questa system call ha come valore di ritorno al thread padre il pid del processo figlio (che essendo diverso da 0 è true) e al thread figlio ritorna 0, quindi il processo padre riceve un valore diverso da 0 (pid del figlio) e stampa true, mentre il processo figlio riceve 0, non entra nel if e stampa, ovviamente false.