<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://so.v2.cs.unibo.it/wiki/index.php?action=history&amp;feed=atom&amp;title=ProvaPratica_2055.02.10</id>
	<title>ProvaPratica 2055.02.10 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://so.v2.cs.unibo.it/wiki/index.php?action=history&amp;feed=atom&amp;title=ProvaPratica_2055.02.10"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2055.02.10&amp;action=history"/>
	<updated>2026-05-13T14:30:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2055.02.10&amp;diff=569&amp;oldid=prev</id>
		<title>Mrta: Mrta moved page ProvaPratica 2015.02.10 to ProvaPratica 2055.02.10</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2055.02.10&amp;diff=569&amp;oldid=prev"/>
		<updated>2014-04-09T15:44:54Z</updated>

		<summary type="html">&lt;p&gt;Mrta moved page &lt;a href=&quot;/wiki/index.php/ProvaPratica_2015.02.10&quot; class=&quot;mw-redirect&quot; title=&quot;ProvaPratica 2015.02.10&quot;&gt;ProvaPratica 2015.02.10&lt;/a&gt; to &lt;a href=&quot;/wiki/index.php/ProvaPratica_2055.02.10&quot; title=&quot;ProvaPratica 2055.02.10&quot;&gt;ProvaPratica 2055.02.10&lt;/a&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:44, 9 April 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Mrta</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2055.02.10&amp;diff=568&amp;oldid=prev</id>
		<title>Mrta: Created page with &quot;== Esercizio 1 ==  In una rete token-ring, i nodi sono organizzati ad anello e si scambiano un “token” che passa da un nodo al successivo.&lt;br&gt; Quando un processo riceve il...&quot;</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2055.02.10&amp;diff=568&amp;oldid=prev"/>
		<updated>2014-04-09T15:43:06Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Esercizio 1 ==  In una rete token-ring, i nodi sono organizzati ad anello e si scambiano un “token” che passa da un nodo al successivo.&amp;lt;br&amp;gt; Quando un processo riceve il...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
In una rete token-ring, i nodi sono organizzati ad anello e si scambiano un “token” che passa da un nodo al successivo.&amp;lt;br&amp;gt;&lt;br /&gt;
Quando un processo riceve il token:&amp;lt;br&amp;gt;&lt;br /&gt;
● stampa “pid: ho ricevuto il token”&amp;lt;br&amp;gt;&lt;br /&gt;
● attende 1 secondo&amp;lt;br&amp;gt;&lt;br /&gt;
● stampa “pid: spedisco il token al processo x”&amp;lt;br&amp;gt;&lt;br /&gt;
● spedisce il token al processo x&amp;lt;br&amp;gt;&lt;br /&gt;
dove pid è l'identificatore del processo che stampa, e x è l'identificatore del processo successivo.&amp;lt;br&amp;gt;&lt;br /&gt;
Scrivere un programma che genera N processi che comunicano tramite &amp;quot;token-ring&amp;quot;. Viene lasciata allo studente la scelta&amp;lt;br&amp;gt;&lt;br /&gt;
del meccanismo di sincronizzazione/comunicazione (ma vedi punto 2).&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&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;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static int token=42;&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
        int i;&lt;br /&gt;
        int n=atoi(argv[1]);&lt;br /&gt;
        char *s;&lt;br /&gt;
        pid_t firstproc,nextproc,newproc;&lt;br /&gt;
        firstproc=newproc=fork();&lt;br /&gt;
        nextproc=0;&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++) {&lt;br /&gt;
                if (newproc==0) {&lt;br /&gt;
                        int fdin, fdout;&lt;br /&gt;
                        //nextproc e' il successivo&lt;br /&gt;
                        if (nextproc != 0) {&lt;br /&gt;
                                asprintf(&amp;amp;s,&amp;quot;/tmp/np%03d&amp;quot;,nextproc);&lt;br /&gt;
                                mknod(s,S_IFIFO | 0644, 0);&lt;br /&gt;
                                fdout=open(s,O_WRONLY);&lt;br /&gt;
                                free(s);&lt;br /&gt;
                                asprintf(&amp;amp;s,&amp;quot;/tmp/np%03d&amp;quot;,getpid());&lt;br /&gt;
                                mknod(s,S_IFIFO | 0644, 0);&lt;br /&gt;
                                fdin=open(s,O_RDONLY);&lt;br /&gt;
                                free(s);&lt;br /&gt;
                        } else {&lt;br /&gt;
                                asprintf(&amp;amp;s,&amp;quot;/tmp/np%03d&amp;quot;,getpid());&lt;br /&gt;
                                mknod(s,S_IFIFO | 0644, 0);&lt;br /&gt;
                                fdin=open(s,O_RDONLY);&lt;br /&gt;
                                free(s);&lt;br /&gt;
                                read(fdin,&amp;amp;nextproc,sizeof(nextproc));&lt;br /&gt;
                                asprintf(&amp;amp;s,&amp;quot;/tmp/np%03d&amp;quot;,nextproc);&lt;br /&gt;
                                mknod(s,S_IFIFO | 0644, 0);&lt;br /&gt;
                                fdout=open(s,O_WRONLY);&lt;br /&gt;
                                free(s);&lt;br /&gt;
                                write(fdout, &amp;amp;token, sizeof(token));&lt;br /&gt;
                        }&lt;br /&gt;
                        while (1) {&lt;br /&gt;
                                int buf;&lt;br /&gt;
                                read(fdin, &amp;amp;buf, sizeof(buf));&lt;br /&gt;
                                printf(&amp;quot;%d ricevuto il token\n&amp;quot;,getpid());&lt;br /&gt;
                                sleep(1);&lt;br /&gt;
                                printf(&amp;quot;%d spedisco il token a %d\n&amp;quot;,getpid(),nextproc);&lt;br /&gt;
                                write(fdout, &amp;amp;token, sizeof(token));&lt;br /&gt;
                        }&lt;br /&gt;
                        exit(0);&lt;br /&gt;
                }&lt;br /&gt;
                nextproc=newproc;&lt;br /&gt;
                if (i&amp;lt;n-1) newproc=fork();&lt;br /&gt;
        }&lt;br /&gt;
        int fdout;&lt;br /&gt;
        asprintf(&amp;amp;s,&amp;quot;/tmp/np%03d&amp;quot;,nextproc);&lt;br /&gt;
        mknod(s,S_IFIFO | 0644, 0);&lt;br /&gt;
        fdout=open(s,O_WRONLY);&lt;br /&gt;
        free(s);&lt;br /&gt;
        write(fdout, &amp;amp;firstproc, sizeof(firstproc));&lt;br /&gt;
        close(fdout);&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++) {&lt;br /&gt;
                int status;&lt;br /&gt;
                wait(&amp;amp;status);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrta</name></author>
	</entry>
</feed>