<?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:laboratorio20:esercitazionib</title>
        <description></description>
        <link>https://didawiki.di.unipi.it/</link>
        <lastBuildDate>Sat, 04 Apr 2026 21:03:06 +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/laboratorio20/esercitazionib/esercitazione1</link>
            <description>Esercitazione 1 (ripasso C)

Esercizio 1

Scrivere una funzione &#039;mystrcat&#039; con il seguente prototipo:


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


La funzione prende un buffer, la lunghezza del buffer in bytes 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>Tue, 09 Feb 2021 18:26:22 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 2</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/esercitazionib/esercitazione2</link>
            <description>Esercitazione 2

Esercizio 1: funzioni rientranti

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(NULL, &quot; &quot;);
  …</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 23 Feb 2020 18:56:54 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 3</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/esercitazionib/esercitazione3</link>
            <description>Esercitazione 3

Esercizio 1: libtokenizer.a

Inserire in un file &#039;tokenizer.h&#039; la dichiarazione di due funzioni &#039;tokenizer&#039; e &#039;tokenizer_r&#039; (vedere la soluzione proposta nell&#039;Esercitazione 2). &#039;tokenizer&#039; ha la stessa interfaccia di &#039;tokenizer_r&#039; ma mentre la prima usa al suo interno &#039;strtok&#039;, la seconda usa &#039;strtok_r&#039;. Inserire nel file &#039;tokenizer_lib.c&#039; l&#039;implementazione delle due funzioni (cioè la loro definizione). Creare quindi una librerie statica &#039;libtokenizer.a&#039; che offre l&#039;implementazi…</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 03 Mar 2020 07:44:39 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 4</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/esercitazionib/esercitazione4</link>
            <description>Esercitazione 4

Esercizio 1

Scrivere un programma C che legge il file “/etc/passwd” e scrive in un file testuale la lista dei &#039;login name&#039; del sistema, uno per riga. Il nome del file testuale di output viene passato come unico argomento al programma. Il formato del file passwd è descritto in</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 07 Mar 2020 15:13:43 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 5</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/esercitazionib/esercitazione5</link>
            <description>Esercitazione 5

Esercizio 1

Scaricare il seguente tarball compresso contenente dei file sorgenti distribuiti in un albero di directories descritte nel file README contenuto nel tarball ([file da scaricare]).
Completare il Makefile presente nella directory top-level in modo che generi l&#039;eseguibile &#039;myprog&#039; all&#039;interno della directory &#039;bin&#039;, la libraria &#039;libbt.so&#039; nella directory &#039;lib&#039;. Il Makefile dovrà avere anche un target (PHONY) &#039;test1&#039; che lancia il programma &#039;myprog&#039; con opportuni paramet…</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 14 Mar 2020 06:35:54 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 6</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/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, 24 Mar 2020 09:06:39 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 7</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/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>Sat, 28 Mar 2020 06:59:27 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 8</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/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, 31 Mar 2020 12:59:26 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 9</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/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, lettura di variabili d&#039;ambiente, etc</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 16 Apr 2020 08:36:27 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 10</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/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 capacità “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 Apr 2020 06:36:45 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 11</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/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>Thu, 23 Apr 2020 17:21:37 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 12</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/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>Sun, 10 May 2020 06:07:01 +0000</pubDate>
        </item>
        <item>
            <title>Esercitazione 13</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/esercitazionib/esercitazione13</link>
            <description>Esercitazione 13

Esercizio 1

Realizzare l&#039;Esercizio 2 dell&#039;Esercitazione 11 con un pool di N threads (N è un parametro del programma) secondo il modello Manager-Workers. Il generico thread Worker gestisce interamente tutta le richieste di un client connesso. Gestire i segnali SIGINT e SIGQUIT per la terminazione consistente del server.</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 19 May 2020 06:10:34 +0000</pubDate>
        </item>
        <item>
            <title>Implementazione delle funzioni &quot;readn&quot; e &quot;writen&quot;</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/esercitazionib/readnwriten</link>
            <description>Implementazione delle funzioni &quot;readn&quot; e &quot;writen&quot;

(tratto da “Advanced Programming In the UNIX Environment” by W. Richard Stevens and Stephen A. Rago, 2013, 3rd Edition, Addison-Wesley)

readn and writen Functions

Pipes, FIFOs, and some devices—notably terminals and networks—have the following
two properties.</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 03 May 2020 10:44:20 +0000</pubDate>
        </item>
        <item>
            <title>Alcuni esempi di semplici programmi C con processi e pipe senza nome</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/esercitazionib/scexamples</link>
            <description>Alcuni esempi di semplici programmi C con processi e pipe senza nome

nproc.c (chiamate usate: &#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>Fri, 27 Mar 2020 13:27:22 +0000</pubDate>
        </item>
        <item>
            <title>Sommario lezioni ed esercitazioni</title>
            <link>https://didawiki.di.unipi.it/doku.php/informatica/sol/laboratorio20/esercitazionib/start</link>
            <description>Sommario lezioni ed esercitazioni

----------

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

----------
  Numero    Descrizione    Materiale    Altro    Data    1  Introduzione al corso 
Lezione/Esercitazione: Compilazione con gcc: descrizione di alcuni parametri tipici (-g -c -o -I -O). Uso del C99 vs Ansi C. Richiami di C (stringhe,</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Wed, 27 Jan 2021 07:01:57 +0000</pubDate>
        </item>
    </channel>
</rss>
