<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Simone</id>
	<title>Sistemi Operativi - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Simone"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php/Special:Contributions/Simone"/>
	<updated>2026-05-11T11:51:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1312</id>
		<title>User:Simone</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1312"/>
		<updated>2016-03-12T16:22:36Z</updated>

		<summary type="html">&lt;p&gt;Simone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NO TAP:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.facebook.com/comitato.notap/?fref=ts comitatoNoTap--pagina facebook]&lt;br /&gt;
&lt;br /&gt;
'''NO TRIV:'''vota si per di no alle trivellazioni&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.notriv.com/ referendum site]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SEA SHEPHERD'''--salviamo il mare:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.seashepherd.it/ sea sheperd Italia]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.seashepherd.org/ official site]&lt;br /&gt;
&lt;br /&gt;
'''parrot security OS:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[https://parrotsec.org/ official site]&lt;br /&gt;
&lt;br /&gt;
'''bitbucket (git repo):'''&amp;lt;br&amp;gt;&lt;br /&gt;
[https://bitbucket.org/ official site]&lt;br /&gt;
&lt;br /&gt;
'''L'olio di palma non è sostenibile. MAI!!''': &amp;lt;br&amp;gt;&lt;br /&gt;
in questi giorni ho notato la presenza ricorrente di una pubblicità in tv sull'olio di palma sostenibile, l'olio di palma viene usato per la maggiore in ambito industriale (bioenergetico, farmaceutico ecc.). Non esistono controindicazioni per la salute (a fronte di una dieta bilanciata) ma si sicuro produrlo in maniera così incontrollata non fa bene alla salute dell'intero pianeta.&amp;lt;br&amp;gt;&lt;br /&gt;
Interi ecosistemi vengono distrutti completamente per piantare le palme da olio.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://oliodipalmainsostenibile.it/ oliodipalmainsostenibile.it]&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1311</id>
		<title>User:Simone</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1311"/>
		<updated>2016-03-12T16:15:51Z</updated>

		<summary type="html">&lt;p&gt;Simone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NO TAP:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.facebook.com/comitato.notap/?fref=ts comitatoNoTap--pagina facebook]&lt;br /&gt;
&lt;br /&gt;
'''NO TRIV:'''vota si per di no alle trivellazioni&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.notriv.com/ referendum site]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SEA SHEPHERD'''--salviamo il mare:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.seashepherd.it/ sea sheperd Italia]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.seashepherd.org/ official site]&lt;br /&gt;
&lt;br /&gt;
'''parrot security OS:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[https://parrotsec.org/ official site]&lt;br /&gt;
&lt;br /&gt;
'''bitbucket (git repo):'''&amp;lt;br&amp;gt;&lt;br /&gt;
[https://bitbucket.org/ official site]&lt;br /&gt;
&lt;br /&gt;
'''L'olio di palma non è sostenibile. MAI!!''': &amp;lt;br&amp;gt;&lt;br /&gt;
in questi giorni ho notato la presenza ricorrente di una pubblicità in tv sull'olio di palma sostenibile, l'olio di palma viene usato nella maggior parte degli alimenti e non è salutare nè ingerirlo ne produrlo.&amp;lt;br&amp;gt;&lt;br /&gt;
Interi ecosistemi vengono distrutti completamente per piantare le palme da olio.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://oliodipalmainsostenibile.it/ oliodipalmainsostenibile.it]&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1310</id>
		<title>User:Simone</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1310"/>
		<updated>2016-03-12T16:05:43Z</updated>

		<summary type="html">&lt;p&gt;Simone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NO TAP:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.facebook.com/comitato.notap/?fref=ts comitatoNoTap--pagina facebook]&lt;br /&gt;
&lt;br /&gt;
'''SEA SHEPHERD'''--salviamo il mare:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.seashepherd.it/ sea sheperd Italia]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.seashepherd.org/ official site]&lt;br /&gt;
&lt;br /&gt;
'''parrot security OS:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[https://parrotsec.org/ official site]&lt;br /&gt;
&lt;br /&gt;
'''bitbucket (git repo):'''&amp;lt;br&amp;gt;&lt;br /&gt;
[https://bitbucket.org/ official site]&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1309</id>
		<title>User:Simone</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1309"/>
		<updated>2016-03-12T16:00:35Z</updated>

		<summary type="html">&lt;p&gt;Simone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NO TAP'''&lt;br /&gt;
[https://www.facebook.com/comitato.notap/?fref=ts comitatoNoTap--pagina facebook]&lt;br /&gt;
&lt;br /&gt;
'''SEA SHEPHERD'''--salviamo il mare&lt;br /&gt;
[http://www.seashepherd.it/ sea sheperd Italia]&lt;br /&gt;
[http://www.seashepherd.org/ official site]&lt;br /&gt;
&lt;br /&gt;
'''parrot security OS:'''&lt;br /&gt;
[https://parrotsec.org/ official site]&lt;br /&gt;
&lt;br /&gt;
'''bitbucket (git repo):'''&lt;br /&gt;
[https://bitbucket.org/ official site]&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1308</id>
		<title>User:Simone</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1308"/>
		<updated>2016-03-12T15:59:21Z</updated>

		<summary type="html">&lt;p&gt;Simone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NO TAP'''&lt;br /&gt;
[https://www.facebook.com/comitato.notap/?fref=ts comitatoNoTap]&lt;br /&gt;
&lt;br /&gt;
'''SEA SHEPHERD'''--salviamo il mare&lt;br /&gt;
[http://www.seashepherd.it/]&lt;br /&gt;
[http://www.seashepherd.org/]&lt;br /&gt;
&lt;br /&gt;
'''parrot security OS:'''&lt;br /&gt;
[https://parrotsec.org/]&lt;br /&gt;
&lt;br /&gt;
'''bitbucket (git repo):'''&lt;br /&gt;
[https://bitbucket.org/]&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1307</id>
		<title>User:Simone</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1307"/>
		<updated>2016-03-12T15:58:57Z</updated>

		<summary type="html">&lt;p&gt;Simone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NO TAP'''&lt;br /&gt;
[https://www.facebook.com/comitato.notap/?fref=ts]comitatoNoTap&lt;br /&gt;
&lt;br /&gt;
'''SEA SHEPHERD'''--salviamo il mare&lt;br /&gt;
[http://www.seashepherd.it/]&lt;br /&gt;
[http://www.seashepherd.org/]&lt;br /&gt;
&lt;br /&gt;
'''parrot security OS:'''&lt;br /&gt;
[https://parrotsec.org/]&lt;br /&gt;
&lt;br /&gt;
'''bitbucket (git repo):'''&lt;br /&gt;
[https://bitbucket.org/]&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1306</id>
		<title>User:Simone</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1306"/>
		<updated>2016-03-12T15:58:14Z</updated>

		<summary type="html">&lt;p&gt;Simone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NO TAP'''&lt;br /&gt;
[https://www.facebook.com/comitato.notap/?fref=ts]&lt;br /&gt;
&lt;br /&gt;
'''SEA SHEPHERD'''--salviamo il mare&lt;br /&gt;
[http://www.seashepherd.it/]&lt;br /&gt;
[http://www.seashepherd.org/]&lt;br /&gt;
&lt;br /&gt;
'''parrot security OS:'''&lt;br /&gt;
[https://parrotsec.org/]&lt;br /&gt;
&lt;br /&gt;
'''bitbucket (git repo):'''&lt;br /&gt;
[https://bitbucket.org/]&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizi_con_System_Call&amp;diff=1305</id>
		<title>Esercizi con System Call</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizi_con_System_Call&amp;diff=1305"/>
		<updated>2016-03-12T15:44:48Z</updated>

		<summary type="html">&lt;p&gt;Simone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questi programmi contengono esempi di uso delle System-Call.&lt;br /&gt;
&lt;br /&gt;
Il consiglio e' di compilarli, provarli e capirne passo-passo il funzionamento. (o spiegare perche' non funzionino).&lt;br /&gt;
&lt;br /&gt;
Ovviamente potete proporre ulteriori esempi.&lt;br /&gt;
[[User:Renzo|Renzo]] ([[User talk:Renzo|talk]]) 08:03, 2 November 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
== programma 0 ==&lt;br /&gt;
Il gatto di Schr&amp;amp;ouml;dinger: Fork e' vero o falso?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
  if (fork())&lt;br /&gt;
    printf(&amp;quot;fork is true\n&amp;quot;);&lt;br /&gt;
  else&lt;br /&gt;
    printf(&amp;quot;fork is false\n&amp;quot;);&lt;br /&gt;
  usleep(100000);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
([[User:Simone|Simone]])&lt;br /&gt;
&lt;br /&gt;
== programma 1 ==&lt;br /&gt;
Open() Write() Read()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
/*IL PROGRAMMA APRE UN FILE SUL QUALE FA DELLE OPERAZIONI DI LETTURA E SCRITTURA*/&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_CHAR 100000&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
	&lt;br /&gt;
	int fd, c, n_read;&lt;br /&gt;
	int fine = EOF;&lt;br /&gt;
        int index = 0;&lt;br /&gt;
	char arr[MAX_CHAR];&lt;br /&gt;
	char c_arr_read[MAX_CHAR];&lt;br /&gt;
	const char *path = //inserisci qui il percorso del file che vuoi aprire, se il file specificato non esiste, la open fallisce e il &lt;br /&gt;
                           //programma termina con un codice di errore&lt;br /&gt;
	fd = open(path, O_RDWR);&lt;br /&gt;
&lt;br /&gt;
	if(fd == -1){&lt;br /&gt;
		printf(&amp;quot;fd: %d\n&amp;quot;, fd);&lt;br /&gt;
		printf(&amp;quot;Open failed, Err: %d\n&amp;quot;, errno);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
	if( (n_read = read(fd, &amp;amp;c_arr_read, MAX_CHAR)) &amp;gt; 0 ) {&lt;br /&gt;
		printf(&amp;quot;file non vuoto\nbytes letti: %d\n&amp;quot;, n_read);&lt;br /&gt;
		write(fd, &amp;amp;fine, 0);&lt;br /&gt;
	} else printf(&amp;quot;file vuoto\nbytes letti: %d\n&amp;quot;, n_read);&lt;br /&gt;
&lt;br /&gt;
	//printf(&amp;quot;fd: %d\n&amp;quot;, fd);&lt;br /&gt;
	printf(&amp;quot;Open().\n&amp;quot;);&lt;br /&gt;
	while((c = getchar()) != EOF &amp;amp;&amp;amp; index &amp;lt; MAX_CHAR){&lt;br /&gt;
		arr[index] = c;&lt;br /&gt;
		index++;&lt;br /&gt;
	}&lt;br /&gt;
	//printf(&amp;quot;sizeof arr: %d\n&amp;quot;, sizeof(arr));&lt;br /&gt;
	write(fd, &amp;amp;arr, index);&lt;br /&gt;
	&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
([[User:Alessio|Alessio]])&lt;br /&gt;
&lt;br /&gt;
== programma 2 ==&lt;br /&gt;
segnali + fork&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#define _GNU_SOURCE&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;pty.h&amp;gt;&lt;br /&gt;
#include &amp;lt;utmp.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define BUFSIZE 1024&lt;br /&gt;
&lt;br /&gt;
sigset_t usr12mask;&lt;br /&gt;
sigset_t usr1mask;&lt;br /&gt;
int status;&lt;br /&gt;
int fd, fdout;&lt;br /&gt;
char name[80];&lt;br /&gt;
static int bit;&lt;br /&gt;
char *ar[2] = {&amp;quot;bash&amp;quot;, NULL};&lt;br /&gt;
&lt;br /&gt;
void usr12action(int num, siginfo_t *info, void *useless) {&lt;br /&gt;
	if (num == SIGCHLD)&lt;br /&gt;
		bit=-1;&lt;br /&gt;
	else {&lt;br /&gt;
		bit = (num == SIGUSR2);&lt;br /&gt;
		kill(info-&amp;gt;si_pid, SIGUSR1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void usr1action(int num, siginfo_t *info, void *useless) {&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void char_to_bin(unsigned char x, void *rec){&lt;br /&gt;
	int i;&lt;br /&gt;
	pid_t *r = rec;&lt;br /&gt;
&lt;br /&gt;
	for(i=7; i&amp;gt;=0; i--){&lt;br /&gt;
		char f = x &amp;gt;&amp;gt; i &amp;amp; 1;&lt;br /&gt;
		kill(*r,f?SIGUSR2:SIGUSR1);&lt;br /&gt;
		sigsuspend(&amp;amp;usr1mask);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int readbit(void *v)&lt;br /&gt;
{&lt;br /&gt;
	sigsuspend(&amp;amp;usr12mask);&lt;br /&gt;
	return bit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int bin2char(int (*f)(void *opaque), void *opaque) {&lt;br /&gt;
	int i;&lt;br /&gt;
	int c;&lt;br /&gt;
	for (i=c=0; i&amp;lt;8; i++) {&lt;br /&gt;
		int n=f(opaque);&lt;br /&gt;
		if (n&amp;lt;0)&lt;br /&gt;
			return -1;&lt;br /&gt;
		c = c&amp;lt;&amp;lt;1 | n;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main(int argc, char *argv[]){&lt;br /&gt;
&lt;br /&gt;
	if (argc == 1) {&lt;br /&gt;
		pid_t pid = fork ();&lt;br /&gt;
&lt;br /&gt;
		if(pid &amp;gt; 0){&lt;br /&gt;
			int c;&lt;br /&gt;
&lt;br /&gt;
			static struct sigaction sa={&lt;br /&gt;
				.sa_sigaction=usr12action,&lt;br /&gt;
				.sa_flags=SA_SIGINFO&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%d\n&amp;quot;,getpid());&lt;br /&gt;
&lt;br /&gt;
			sigfillset(&amp;amp;usr12mask);&lt;br /&gt;
			sigdelset(&amp;amp;usr12mask,SIGINT);&lt;br /&gt;
			sigprocmask(SIG_SETMASK,&amp;amp;usr12mask,NULL);&lt;br /&gt;
			sigdelset(&amp;amp;usr12mask,SIGCHLD);&lt;br /&gt;
			sigdelset(&amp;amp;usr12mask,SIGUSR1);&lt;br /&gt;
			sigdelset(&amp;amp;usr12mask,SIGUSR2);&lt;br /&gt;
			sigaction(SIGUSR1,&amp;amp;sa,NULL);&lt;br /&gt;
			sigaction(SIGUSR2,&amp;amp;sa,NULL);&lt;br /&gt;
			sigaction(SIGCHLD,&amp;amp;sa,NULL);&lt;br /&gt;
&lt;br /&gt;
			while ((c=bin2char(readbit,stdin)) != EOF)&lt;br /&gt;
				putchar(c);&lt;br /&gt;
			if (waitpid(pid, &amp;amp;status, 0) != pid)  status = -1;&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			char *path;&lt;br /&gt;
			char *sppid;&lt;br /&gt;
			pid_t ppid=getppid();&lt;br /&gt;
			asprintf(&amp;amp;path,&amp;quot;/proc/%d/exe&amp;quot;,ppid);&lt;br /&gt;
			asprintf(&amp;amp;sppid,&amp;quot;%d&amp;quot;,ppid);&lt;br /&gt;
			execl(&amp;quot;/usr/bin/xterm&amp;quot;, &amp;quot;xterm&amp;quot;, &amp;quot;-e&amp;quot;, path, sppid, (void *) 0);&lt;br /&gt;
			exit(1);&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		unsigned char buf[BUFSIZE];&lt;br /&gt;
		unsigned char *s;&lt;br /&gt;
		pid_t receiver=atoi(argv[1]);&lt;br /&gt;
&lt;br /&gt;
		static struct sigaction sa={.sa_sigaction=usr1action};&lt;br /&gt;
		sigaction(SIGUSR1,&amp;amp;sa,NULL);&lt;br /&gt;
&lt;br /&gt;
		printf(&amp;quot;%d-&amp;gt;%d\n&amp;quot;,getpid(),receiver);&lt;br /&gt;
		sigfillset(&amp;amp;usr1mask);&lt;br /&gt;
		sigdelset(&amp;amp;usr1mask,SIGINT);&lt;br /&gt;
		sigprocmask(SIG_SETMASK,&amp;amp;usr1mask,NULL);&lt;br /&gt;
		sigdelset(&amp;amp;usr1mask,SIGUSR1);&lt;br /&gt;
		if (argc == 2){&lt;br /&gt;
			while ((s=fgets(buf,BUFSIZE,stdin))!=NULL){&lt;br /&gt;
				while (*s){&lt;br /&gt;
					char_to_bin(*s++, &amp;amp;receiver);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il programma in questione &amp;quot;unisce&amp;quot; di fatto i due programmi sigsend e sigrec.&lt;br /&gt;
l'idea è quella che venga lanciato un unico processo e aprire un nuovo terminale dove contiunare l'esecuzione del figlio creato attraverso la fork.&lt;br /&gt;
Possiamo quindi sfruttare il fatto che i due processi (essendo padre e figlio) conoscono i rispettivi pid e quindi automatizzare questa parte senza fornire alcun pid in input.&lt;br /&gt;
è possibile anche fornire un pid come argomento per comunicare con processi diversi.&lt;br /&gt;
([[User:Simone|Simone]])&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizi_con_System_Call&amp;diff=1304</id>
		<title>Esercizi con System Call</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizi_con_System_Call&amp;diff=1304"/>
		<updated>2016-03-12T15:44:15Z</updated>

		<summary type="html">&lt;p&gt;Simone: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questi programmi contengono esempi di uso delle System-Call.&lt;br /&gt;
&lt;br /&gt;
Il consiglio e' di compilarli, provarli e capirne passo-passo il funzionamento. (o spiegare perche' non funzionino).&lt;br /&gt;
&lt;br /&gt;
Ovviamente potete proporre ulteriori esempi.&lt;br /&gt;
[[User:Renzo|Renzo]] ([[User talk:Renzo|talk]]) 08:03, 2 November 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
== programma 0 ==&lt;br /&gt;
Il gatto di Schr&amp;amp;ouml;dinger: Fork e' vero o falso?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
  if (fork())&lt;br /&gt;
    printf(&amp;quot;fork is true\n&amp;quot;);&lt;br /&gt;
  else&lt;br /&gt;
    printf(&amp;quot;fork is false\n&amp;quot;);&lt;br /&gt;
  usleep(100000);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
([[User:Simone|Simone]])&lt;br /&gt;
&lt;br /&gt;
== programma 1 ==&lt;br /&gt;
Open() Write() Read()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
/*IL PROGRAMMA APRE UN FILE SUL QUALE FA DELLE OPERAZIONI DI LETTURA E SCRITTURA*/&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_CHAR 100000&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
	&lt;br /&gt;
	int fd, c, n_read;&lt;br /&gt;
	int fine = EOF;&lt;br /&gt;
        int index = 0;&lt;br /&gt;
	char arr[MAX_CHAR];&lt;br /&gt;
	char c_arr_read[MAX_CHAR];&lt;br /&gt;
	const char *path = //inserisci qui il percorso del file che vuoi aprire, se il file specificato non esiste, la open fallisce e il &lt;br /&gt;
                           //programma termina con un codice di errore&lt;br /&gt;
	fd = open(path, O_RDWR);&lt;br /&gt;
&lt;br /&gt;
	if(fd == -1){&lt;br /&gt;
		printf(&amp;quot;fd: %d\n&amp;quot;, fd);&lt;br /&gt;
		printf(&amp;quot;Open failed, Err: %d\n&amp;quot;, errno);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
	if( (n_read = read(fd, &amp;amp;c_arr_read, MAX_CHAR)) &amp;gt; 0 ) {&lt;br /&gt;
		printf(&amp;quot;file non vuoto\nbytes letti: %d\n&amp;quot;, n_read);&lt;br /&gt;
		write(fd, &amp;amp;fine, 0);&lt;br /&gt;
	} else printf(&amp;quot;file vuoto\nbytes letti: %d\n&amp;quot;, n_read);&lt;br /&gt;
&lt;br /&gt;
	//printf(&amp;quot;fd: %d\n&amp;quot;, fd);&lt;br /&gt;
	printf(&amp;quot;Open().\n&amp;quot;);&lt;br /&gt;
	while((c = getchar()) != EOF &amp;amp;&amp;amp; index &amp;lt; MAX_CHAR){&lt;br /&gt;
		arr[index] = c;&lt;br /&gt;
		index++;&lt;br /&gt;
	}&lt;br /&gt;
	//printf(&amp;quot;sizeof arr: %d\n&amp;quot;, sizeof(arr));&lt;br /&gt;
	write(fd, &amp;amp;arr, index);&lt;br /&gt;
	&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
([[User:Alessio|Alessio]])&lt;br /&gt;
&lt;br /&gt;
== programma 2 ==&lt;br /&gt;
segnali + fork&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#define _GNU_SOURCE&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;pty.h&amp;gt;&lt;br /&gt;
#include &amp;lt;utmp.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define BUFSIZE 1024&lt;br /&gt;
&lt;br /&gt;
sigset_t usr12mask;&lt;br /&gt;
sigset_t usr1mask;&lt;br /&gt;
int status;&lt;br /&gt;
int fd, fdout;&lt;br /&gt;
char name[80];&lt;br /&gt;
static int bit;&lt;br /&gt;
char *ar[2] = {&amp;quot;bash&amp;quot;, NULL};&lt;br /&gt;
&lt;br /&gt;
void usr12action(int num, siginfo_t *info, void *useless) {&lt;br /&gt;
	if (num == SIGCHLD)&lt;br /&gt;
		bit=-1;&lt;br /&gt;
	else {&lt;br /&gt;
		bit = (num == SIGUSR2);&lt;br /&gt;
		kill(info-&amp;gt;si_pid, SIGUSR1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void usr1action(int num, siginfo_t *info, void *useless) {&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void char_to_bin(unsigned char x, void *rec){&lt;br /&gt;
	int i;&lt;br /&gt;
	pid_t *r = rec;&lt;br /&gt;
&lt;br /&gt;
	for(i=7; i&amp;gt;=0; i--){&lt;br /&gt;
		char f = x &amp;gt;&amp;gt; i &amp;amp; 1;&lt;br /&gt;
		kill(*r,f?SIGUSR2:SIGUSR1);&lt;br /&gt;
		sigsuspend(&amp;amp;usr1mask);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int readbit(void *v)&lt;br /&gt;
{&lt;br /&gt;
	sigsuspend(&amp;amp;usr12mask);&lt;br /&gt;
	return bit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int bin2char(int (*f)(void *opaque), void *opaque) {&lt;br /&gt;
	int i;&lt;br /&gt;
	int c;&lt;br /&gt;
	for (i=c=0; i&amp;lt;8; i++) {&lt;br /&gt;
		int n=f(opaque);&lt;br /&gt;
		if (n&amp;lt;0)&lt;br /&gt;
			return -1;&lt;br /&gt;
		c = c&amp;lt;&amp;lt;1 | n;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main(int argc, char *argv[]){&lt;br /&gt;
&lt;br /&gt;
	if (argc == 1) {&lt;br /&gt;
		pid_t pid = fork ();&lt;br /&gt;
&lt;br /&gt;
		if(pid &amp;gt; 0){&lt;br /&gt;
			int c;&lt;br /&gt;
&lt;br /&gt;
			static struct sigaction sa={&lt;br /&gt;
				.sa_sigaction=usr12action,&lt;br /&gt;
				.sa_flags=SA_SIGINFO&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			printf(&amp;quot;%d\n&amp;quot;,getpid());&lt;br /&gt;
&lt;br /&gt;
			sigfillset(&amp;amp;usr12mask);&lt;br /&gt;
			sigdelset(&amp;amp;usr12mask,SIGINT);&lt;br /&gt;
			sigprocmask(SIG_SETMASK,&amp;amp;usr12mask,NULL);&lt;br /&gt;
			sigdelset(&amp;amp;usr12mask,SIGCHLD);&lt;br /&gt;
			sigdelset(&amp;amp;usr12mask,SIGUSR1);&lt;br /&gt;
			sigdelset(&amp;amp;usr12mask,SIGUSR2);&lt;br /&gt;
			sigaction(SIGUSR1,&amp;amp;sa,NULL);&lt;br /&gt;
			sigaction(SIGUSR2,&amp;amp;sa,NULL);&lt;br /&gt;
			sigaction(SIGCHLD,&amp;amp;sa,NULL);&lt;br /&gt;
&lt;br /&gt;
			while ((c=bin2char(readbit,stdin)) != EOF)&lt;br /&gt;
				putchar(c);&lt;br /&gt;
			if (waitpid(pid, &amp;amp;status, 0) != pid)  status = -1;&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			char *path;&lt;br /&gt;
			char *sppid;&lt;br /&gt;
			pid_t ppid=getppid();&lt;br /&gt;
			asprintf(&amp;amp;path,&amp;quot;/proc/%d/exe&amp;quot;,ppid);&lt;br /&gt;
			asprintf(&amp;amp;sppid,&amp;quot;%d&amp;quot;,ppid);&lt;br /&gt;
			execl(&amp;quot;/usr/bin/xterm&amp;quot;, &amp;quot;xterm&amp;quot;, &amp;quot;-e&amp;quot;, path, sppid, (void *) 0);&lt;br /&gt;
			exit(1);&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		unsigned char buf[BUFSIZE];&lt;br /&gt;
		unsigned char *s;&lt;br /&gt;
		pid_t receiver=atoi(argv[1]);&lt;br /&gt;
&lt;br /&gt;
		static struct sigaction sa={.sa_sigaction=usr1action};&lt;br /&gt;
		sigaction(SIGUSR1,&amp;amp;sa,NULL);&lt;br /&gt;
&lt;br /&gt;
		printf(&amp;quot;%d-&amp;gt;%d\n&amp;quot;,getpid(),receiver);&lt;br /&gt;
		sigfillset(&amp;amp;usr1mask);&lt;br /&gt;
		sigdelset(&amp;amp;usr1mask,SIGINT);&lt;br /&gt;
		sigprocmask(SIG_SETMASK,&amp;amp;usr1mask,NULL);&lt;br /&gt;
		sigdelset(&amp;amp;usr1mask,SIGUSR1);&lt;br /&gt;
		if (argc == 2){&lt;br /&gt;
			while ((s=fgets(buf,BUFSIZE,stdin))!=NULL){&lt;br /&gt;
				while (*s){&lt;br /&gt;
					char_to_bin(*s++, &amp;amp;receiver);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
il programma in questione &amp;quot;unisce&amp;quot; di fatto i due programmi sigsend e sigrec.&lt;br /&gt;
l'idea è quella che venga lanciato un unico processo e aprire un nuovo terminale dove contiunare l'esecuzione del figlio creato attraverso la fork.&lt;br /&gt;
Possiamo quindi sfruttare il fatto che i due processi (essendo padre e figlio) conoscono i rispettivi pid e quindi automatizzare questa parte senza fornire alcun pid in input.&lt;br /&gt;
è possibile anche fornire un pid come argomento per comunicare con processi diversi.&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1243</id>
		<title>User:Simone</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:Simone&amp;diff=1243"/>
		<updated>2015-11-03T12:39:48Z</updated>

		<summary type="html">&lt;p&gt;Simone: Created page with &amp;quot;studente sistemi operativi&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;studente sistemi operativi&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Simone&amp;diff=1242</id>
		<title>Simone</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Simone&amp;diff=1242"/>
		<updated>2015-11-03T12:39:00Z</updated>

		<summary type="html">&lt;p&gt;Simone: Created page with &amp;quot;studente sistemi operativi&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;studente sistemi operativi&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizi_con_System_Call&amp;diff=1241</id>
		<title>Esercizi con System Call</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizi_con_System_Call&amp;diff=1241"/>
		<updated>2015-11-03T12:37:28Z</updated>

		<summary type="html">&lt;p&gt;Simone: /* programma 0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questi programmi contengono esempi di uso delle System-Call.&lt;br /&gt;
&lt;br /&gt;
Il consiglio e' di compilarli, provarli e capirne passo-passo il funzionamento. (o spiegare perche' non funzionino).&lt;br /&gt;
&lt;br /&gt;
Ovviamente potete proporre ulteriori esempi.&lt;br /&gt;
[[User:Renzo|Renzo]] ([[User talk:Renzo|talk]]) 08:03, 2 November 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
== programma 0 ==&lt;br /&gt;
Il gatto di Schr&amp;amp;ouml;dinger: Fork e' vero o falso?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
  if (fork())&lt;br /&gt;
    printf(&amp;quot;fork is true\n&amp;quot;);&lt;br /&gt;
  else&lt;br /&gt;
    printf(&amp;quot;fork is false\n&amp;quot;);&lt;br /&gt;
  usleep(100000);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
([[User:Simone|Simone]])&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizi_con_System_Call&amp;diff=1240</id>
		<title>Esercizi con System Call</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizi_con_System_Call&amp;diff=1240"/>
		<updated>2015-11-03T12:36:06Z</updated>

		<summary type="html">&lt;p&gt;Simone: /* programma 0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questi programmi contengono esempi di uso delle System-Call.&lt;br /&gt;
&lt;br /&gt;
Il consiglio e' di compilarli, provarli e capirne passo-passo il funzionamento. (o spiegare perche' non funzionino).&lt;br /&gt;
&lt;br /&gt;
Ovviamente potete proporre ulteriori esempi.&lt;br /&gt;
[[User:Renzo|Renzo]] ([[User talk:Renzo|talk]]) 08:03, 2 November 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
== programma 0 ==&lt;br /&gt;
Il gatto di Schr&amp;amp;ouml;dinger: Fork e' vero o falso?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
  if (fork())&lt;br /&gt;
    printf(&amp;quot;fork is true\n&amp;quot;);&lt;br /&gt;
  else&lt;br /&gt;
    printf(&amp;quot;fork is false\n&amp;quot;);&lt;br /&gt;
  usleep(100000);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Simone preite&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizi_con_System_Call&amp;diff=1239</id>
		<title>Esercizi con System Call</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizi_con_System_Call&amp;diff=1239"/>
		<updated>2015-11-03T11:32:24Z</updated>

		<summary type="html">&lt;p&gt;Simone: /* programma 0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questi programmi contengono esempi di uso delle System-Call.&lt;br /&gt;
&lt;br /&gt;
Il consiglio e' di compilarli, provarli e capirne passo-passo il funzionamento. (o spiegare perche' non funzionino).&lt;br /&gt;
&lt;br /&gt;
Ovviamente potete proporre ulteriori esempi.&lt;br /&gt;
[[User:Renzo|Renzo]] ([[User talk:Renzo|talk]]) 08:03, 2 November 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
== programma 0 ==&lt;br /&gt;
Il gatto di Schr&amp;amp;ouml;dinger: Fork e' vero o falso?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]) {&lt;br /&gt;
  if (fork())&lt;br /&gt;
    printf(&amp;quot;fork is true\n&amp;quot;);&lt;br /&gt;
  else&lt;br /&gt;
    printf(&amp;quot;fork is false\n&amp;quot;);&lt;br /&gt;
  usleep(100000);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Simone</name></author>
	</entry>
</feed>