<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://didawiki.di.unipi.it/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>DidaWiki - informatica:sol:laboratorio19:esercitazionib</title>
        <description></description>
        <link>https://didawiki.di.unipi.it/</link>
        <lastBuildDate>Sat, 04 Apr 2026 23:13:21 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://didawiki.di.unipi.it/lib/exe/fetch.php/wiki/dokuwiki.svg</url>
            <title>DidaWiki</title>
            <link>https://didawiki.di.unipi.it/</link>
        </image>
        <item>
            <title>Esercitazione 1 (ripasso C)</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione1</link>
            <description>Esercitazione 1 (ripasso C)

Esercizio 1

Scrivere una funzione &#039;mystrcat&#039; con la seguente segnatura:


const char *mystrcat(char* buffer, int buffer_size, char *prima, ...);


La funzione prende un buffer, la lunghezza del buffer ed almeno uno stringa. Le stringhe possono essere un numero variabile (&gt;1). La funzione concatena tutte le stringhe nel &#039;buffer&#039; e ritorna il buffer stesso.
ATTENZIONE alla gestione della memoria!</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 18 Feb 2019 20:21:35 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 2</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione2</link>
            <description>Esercitazione 2

Esercizio 1: funzioni rientranti (tokenizer_r)

Si consideri il seguente programma:


#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main(int argc, char *argv[]) {
    if (argc != 3) {
	fprintf(stderr, &quot;use: %s stringa1 stringa2\n&quot;, argv[0]);
	return -1;
    }
    char* token1 = strtok(argv[1], &quot; &quot;);

    while (token1) {
	printf(&quot;%s\n&quot;, token1);
	char* token2 = strtok(argv[2], &quot; &quot;);
	while(token2) {
	    printf(&quot;%s\n&quot;, token2);
	    token2 = strtok(NULL, &quot; &quot;);
	}
	token1 = strtok(…</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 04 Mar 2019 14:22:35 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 3</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione3</link>
            <description>Esercitazione 3

Esercizio 1: libtokenizer.a

Inserire nel file &#039;tokenizer.h&#039; l&#039;interfaccia di due funzioni &#039;tokenizer&#039; e &#039;tokenizer_r&#039; (quest&#039;ultima e&#039; quella implementata nell&#039;esercizio 4 dell&#039;Esercitazione 2 mentre &#039;tokenizer&#039; ha la stessa interfaccia di &#039;tokenizer_r&#039; ma usa &#039;strtok&#039; invece di strtok_r). Inserire nel file &#039;tokenizer.c&#039; l&#039;implementazione delle due funzioni. Creare quindi una librerie statica &#039;libtokenizer.a&#039; e riscrivere il programma dell&#039;esercizio 4 dell&#039;Esercitazione 2 in mo…</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 05 Mar 2019 09:00:20 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 4</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione4</link>
            <description>Esercitazione 4

Esercizio 1:

Scrivere un programma che prende in ingresso un intero &#039;N&#039; (&#039;N&#039; e&#039; piccolo, es. &lt;html&gt;&lt;=512&lt;/html&gt;), alloca in memoria una matrice di NxN elementi float in modo che siano contigui in memoria. 
Inizializzare tale matrice (chiamata ad esempio M1) in modo arbitrario (ad esempio M1(i,j) = (i+j)/2.0). 
Fare quindi il salvataggio in un file della matrice sia in formato</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Wed, 13 Mar 2019 05:46:55 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 5</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione5</link>
            <description>Esercitazione 5

Discussione su Makefile

Vogliamo scrivere un Makefile in grado di compilare tutti i sorgenti .c che si trovano nella directory dove si trova il Makefile, personalizzando la compilazione dei file eseguibili:


CC	= gcc -std=c99   # quale compilatore usare per compilare il codice
CFLAGS	= -g -Wall       # flags passati al compilatore per debugging e warning etc..
OPTFLAGS= -O3            # flags passati al compilatore per ottimizzazione del codice
INCLUDES= -I.            # path …</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 18 Mar 2019 11:30:26 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 6</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione6</link>
            <description>Esercitazione 6

Esercizio 1

Completare le parti mancanti (sia codice che commento) del seguente script bash: 



....                      # shell da usare per l’interpretazione dello script

if [ $# -ne 1 ]; then                        # (commenta il codice) ........
    echo usa: $(basename $0) nomedirectory   # .........
    exit -1
fi
dir=$1
if [ ! -d $dir ]; then                       # (commenta il codice) .........
    echo &quot;L&#039;argomento $dir non e&#039; una directory&quot;   
    exit 1;   
fi

b…</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 26 Mar 2019 07:04:29 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 7</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione7</link>
            <description>Esercitazione 7

Esercizio 1

Scrivere un programma, utilizzando chiamate di sistema, che implementi l&#039;equivalente del comando Unix cp. Il programma deve accettare 3 argomenti come segue:


mycp_sc filein fileout [buffersize]


L&#039;argomento &#039;buffersize&#039; e&#039; la dimensione del buffer da utilizzare per le letture e scritture con le SC</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 08 Apr 2019 16:29:39 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 8</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione8</link>
            <description>Esercitazione 8

Esercizio 1

Implementare utilizzando le chiamate di sistema open read write close l&#039;equivalente del comando Unix cat:



 mycat file1 [fileN].


Esercizio 2

Scrivere un programma C che appena attivato va immediatamente in background, attende per X secondi (eseguendo il programma</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 16 Apr 2019 05:34:52 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 9</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione9</link>
            <description>Esercitazione 9

Esercizio 1

Realizzare una shell rudimentale (dummyshell) che legge un comando con eventuali parametri dallo standard input e ne invoca l&#039;esecuzione utilizzando una funzione della famiglia exec(). La shell deve terminare se viene digitato il comando &#039;exit&#039;. 
Il formato dei comandi accettati dalla shell e&#039; molto semplice e non non prevede metacaratteri, redirezione, pipe, etc</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 30 Apr 2019 04:58:53 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 10</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione10</link>
            <description>Esercitazione 10

Esercizio 1

Scrivere un programma C in cui si attivano M thread produttori ed N thread consumatori che condividono una coda (di lunghezza “infinita”). Il programma accetta come argomento anche un intero K che corrisponde al numero totale di messaggi che i produttori producono concorrentemente nella coda (ogni produttore produce K/M messaggi se M divide K). I consumatori leggono i messaggi dalla coda in un ciclo infinito fino a quando non ricevono un messaggio speciale che li f…</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 06 May 2019 13:37:40 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 11</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione11</link>
            <description>Esercitazione 11

Esercizio 1

Realizzare in C un programma client ed un programma server. I due processi intergiscono utilizzando socket AF_UNIX. Il client apre una connessione verso il server ed invia richieste (sotto forma di stringhe) corrispondenti ad operazioni aritmetiche inserite dall&#039;utente (es. 2+1, 3/4 + 2/7, sqrt(5) + 3.14,</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 13 May 2019 10:38:04 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 12</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione12</link>
            <description>Esercitazione 12

Esercizio 1

Scrivere un programma C che conta il numero di volte in cui l&#039;utente invia il segnale SIGINT (Ctl-C) al processo. Quando il processo riceve il segnale SIGTSTP (Ctl-Z), il numero di SIGINT ricevuti viene stampato sullo standard output. Al terzo segnale SIGTSTP, il processo chiede all&#039;utente se deve terminare o no attendendo una risposta per 10 secondi dallo standard input. Se l&#039;utente non risponde entro 10 secondi un segnale SIGALRM termina il processo.</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 21 May 2019 06:41:39 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 13</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/esercitazione13</link>
            <description>Esercitazione 13

Esercizio 1

Realizzare l&#039;Esercizio 2 dell&#039;Esercitazione 11 con un pool di N threads (N e&#039; un parametro del programma) secondo il modello master-worker, ossia esiste un thread “listener” connesso tramite una coda concorrente ad un pool di N worker threads. Il generico thread del pool gestisce interamente tutta la connessione verso un client connesso. Gestire i segnali SIGINT e SIGQUIT per la terminazione consistente del server.</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 26 May 2019 08:30:52 +0000</pubDate>
        </item>
        <item>
            <title>Alcuni esempi di semplici programmi C con processi e pipe</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/scexamples</link>
            <description>Alcuni esempi di semplici programmi C con processi e pipe

nproc.c (chiamate: &#039;&#039;fork&#039;&#039;, &#039;&#039;wait&#039;&#039;, &#039;&#039;getpid&#039;&#039;)

Si creano nproc processi figli che eseguono un certo numero di iterazioni, si attende quindi la loro terminazione stampando la condizione di terminazione l&#039;exit status e l&#039;eventuale segnale che ha terminato il processo.</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 29 Apr 2019 17:39:50 +0000</pubDate>
        </item>
        <item>
            <title>Sommario lezioni ed esercitazioni</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio19/esercitazionib/start</link>
            <description>Sommario lezioni ed esercitazioni

----------

“valgrind: the &#039;impossible&#039; happened: Killed by fatal signal”

----------
  Numero    Descrizione    Materiale    Commenti    Data    1  Introduzione al corso 
Lezione/Esercitazione: Compilazione con gcc: flags di base. Uso del C99 vs Ansi C. Richiami di C (stringhe,</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 16 Feb 2020 08:20:23 +0000</pubDate>
        </item>
    </channel>
</rss>
