<?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=Davide.boldrin</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=Davide.boldrin"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php/Special:Contributions/Davide.boldrin"/>
	<updated>2026-06-17T20:51:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1_Prova_Pratica_20/06/12&amp;diff=965</id>
		<title>Esercizio 1 Prova Pratica 20/06/12</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1_Prova_Pratica_20/06/12&amp;diff=965"/>
		<updated>2015-04-06T11:01:35Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: Created page with &amp;quot;==Testo== &amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt; Scrivere un programma chiamato spy che tenga sotto controllo una directory (il cui pathname viene passato come unico paramentro), e segnali, sta...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Testo==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Scrivere un programma chiamato spy che tenga sotto controllo una directory (il cui pathname viene passato come unico&lt;br /&gt;
paramentro), e segnali, stampandone il nome, ogni file che viene creato in tale directory.&lt;br /&gt;
Si faccia uso della interfaccia inotify (leggere la pagina di manuale).&lt;br /&gt;
Attenzione: il buffer per gli eventi deve avere dimensione superiore a quella della struttura inotify_event altrimento non c'e'&lt;br /&gt;
spazio per il campo name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Soluzione di Davide Boldrin===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&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;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/inotify.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define EVENT_SIZE  ( sizeof (struct inotify_event) )&lt;br /&gt;
#define EVENT_BUF_LEN     ( 1024 * ( EVENT_SIZE + 16 ) )&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
while(1){ &lt;br /&gt;
 int length, i = 0;&lt;br /&gt;
  int fd;&lt;br /&gt;
  int wd;&lt;br /&gt;
  char buffer[EVENT_BUF_LEN];&lt;br /&gt;
  &lt;br /&gt;
  fd = inotify_init();&lt;br /&gt;
&lt;br /&gt;
  if ( fd &amp;lt; 0 ) {&lt;br /&gt;
    perror( &amp;quot;inotify_init&amp;quot; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  wd = inotify_add_watch( fd, argv[1], IN_CREATE | IN_DELETE );&lt;br /&gt;
&lt;br /&gt;
  length = read( fd, buffer, EVENT_BUF_LEN ); &lt;br /&gt;
&lt;br /&gt;
  if ( length &amp;lt; 0 ) {&lt;br /&gt;
    perror( &amp;quot;read&amp;quot; );&lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
  while ( i &amp;lt; length) {    &lt;br /&gt;
	 struct inotify_event *event = ( struct inotify_event * ) &amp;amp;buffer[ i ];  &lt;br /&gt;
		if ( event-&amp;gt;len ) {&lt;br /&gt;
      if ( event-&amp;gt;mask &amp;amp; IN_CREATE ) {&lt;br /&gt;
        if ( event-&amp;gt;mask &amp;amp; IN_ISDIR ) {&lt;br /&gt;
          printf( &amp;quot;Nuova cartella %s creata.\n&amp;quot;, event-&amp;gt;name );&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
          printf( &amp;quot;Nuovo file %s creato.\n&amp;quot;, event-&amp;gt;name );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      else if ( event-&amp;gt;mask &amp;amp; IN_DELETE ) {&lt;br /&gt;
        if ( event-&amp;gt;mask &amp;amp; IN_ISDIR ) {&lt;br /&gt;
          printf( &amp;quot;Cartella %s eliminata.\n&amp;quot;, event-&amp;gt;name );&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
          printf( &amp;quot;File %s eliminato.\n&amp;quot;, event-&amp;gt;name );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    i += EVENT_SIZE + event-&amp;gt;len;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Qualcuno ha idea di come implementare l'esercizio 2 dello stesso appello!?&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=964</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=964"/>
		<updated>2015-04-06T10:57:31Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di Sistemi Operativi&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1 Prova Pratica 20/06/12]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 3 Prova Pratica 17/06/14]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 3, prova pratica 13/09/2013]]&lt;br /&gt;
&lt;br /&gt;
[[Prova pratica 17 07 14]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 20.01.2015]]&lt;br /&gt;
&lt;br /&gt;
[[bash scripting 2002 gennaio]]&lt;br /&gt;
&lt;br /&gt;
[[Process Race (Prova pratica 18-07-2013)]]&lt;br /&gt;
&lt;br /&gt;
[[Arduino web controller]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 29.05.2013]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 29.05.2014]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 20.06.2013]]&lt;br /&gt;
&lt;br /&gt;
[[Prova_pratica_21_01_15]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 17.06.2014]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1 - 25.09.2014]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 20/02/2014]]&lt;br /&gt;
&lt;br /&gt;
[[Demone ruba input]]&lt;br /&gt;
&lt;br /&gt;
[[wifi daemon]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 13/09/2013]]&lt;br /&gt;
&lt;br /&gt;
[[Problema Dei Filosofi]]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unibo.it/~renzo/so/portability.tgz portability.tgz]&lt;br /&gt;
&lt;br /&gt;
[[listx.h commentato + esempio su container_of]]&lt;br /&gt;
&lt;br /&gt;
[[Congettura di Goldbach]]&lt;br /&gt;
&lt;br /&gt;
[[list segments]]&lt;br /&gt;
&lt;br /&gt;
[[Execv/fork su file aperto]]&lt;br /&gt;
&lt;br /&gt;
[[Angry_Children]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 12/02/2009]]&lt;br /&gt;
&lt;br /&gt;
[[(Programma C) Un quadrato nella matrice]]&lt;br /&gt;
&lt;br /&gt;
[[&amp;quot;classi&amp;quot;_in_C]]&lt;br /&gt;
&lt;br /&gt;
[[Esempi del 02 dicembre 2014]]&lt;br /&gt;
&lt;br /&gt;
[[Materiale dell'AA 2013-14]]&lt;br /&gt;
----&lt;br /&gt;
Ricordate che per creare un account o quando viene richiesto di risolvere un semplice calcolo occorre ricordare quanto scritto [[qui]]&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1,_prova_pratica_20.06.2013&amp;diff=904</id>
		<title>Esercizio 1, prova pratica 20.06.2013</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1,_prova_pratica_20.06.2013&amp;diff=904"/>
		<updated>2015-03-15T12:30:22Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Scrivere un programma che stampi il numero di inode di ogni file presente in una direcotory passata come argomento (o della&lt;br /&gt;
direcotry corrente se il programma viene chiamato senza parametri) e stampi l'elenco in ordine crescente di numero di i-node.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Soluzione di D.Boldrin==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&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;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dirent.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct listnode {  //struttura dati per contenere tutti gli inode dei file di una directory&lt;br /&gt;
struct listnode *next;&lt;br /&gt;
int inode;&lt;br /&gt;
}listnode;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]){&lt;br /&gt;
struct stat fileStat;&lt;br /&gt;
int contanode=0;&lt;br /&gt;
char *filename=argv[1];&lt;br /&gt;
struct stat tp;&lt;br /&gt;
DIR *path;&lt;br /&gt;
struct dirent *dir_object;&lt;br /&gt;
path = opendir(argv[1]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
listnode *root;&lt;br /&gt;
root = (listnode*)calloc(1, sizeof(listnode));&lt;br /&gt;
listnode *tmp=root;&lt;br /&gt;
dir_object = readdir(path); //comincia la scansione della cartella&lt;br /&gt;
	while(dir_object != NULL){&lt;br /&gt;
&lt;br /&gt;
		stat(dir_object-&amp;gt;d_name, &amp;amp;tp);&lt;br /&gt;
			if (S_ISREG(tp.st_mode)){	//l'oggetto dir_object é un file,quindi lo salvo nella struttura&lt;br /&gt;
				contanode++;&lt;br /&gt;
				stat(dir_object-&amp;gt;d_name, &amp;amp;fileStat);&lt;br /&gt;
				tmp-&amp;gt;inode=(fileStat.st_ino);&lt;br /&gt;
				tmp-&amp;gt;next=(listnode*)calloc(1, sizeof(listnode));&lt;br /&gt;
				tmp=tmp-&amp;gt;next;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
		dir_object = readdir(path);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;, contanode);&lt;br /&gt;
ordinaLista(root);&lt;br /&gt;
stampaLista(root);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void ordinaLista(listnode *pnt){&lt;br /&gt;
&lt;br /&gt;
listnode *tmp=pnt;&lt;br /&gt;
int temp;&lt;br /&gt;
	while(tmp-&amp;gt;next!=NULL){&lt;br /&gt;
		&lt;br /&gt;
		while(pnt-&amp;gt;next!=NULL){&lt;br /&gt;
		if(pnt-&amp;gt;inode&amp;lt;tmp-&amp;gt;inode){&lt;br /&gt;
			temp=pnt-&amp;gt;inode;&lt;br /&gt;
			pnt-&amp;gt;inode=tmp-&amp;gt;inode;&lt;br /&gt;
			tmp-&amp;gt;inode=temp;&lt;br /&gt;
			}&lt;br /&gt;
		else{&lt;br /&gt;
		pnt=pnt-&amp;gt;next;&lt;br /&gt;
		}&lt;br /&gt;
		}&lt;br /&gt;
	tmp=tmp-&amp;gt;next;&lt;br /&gt;
	pnt=tmp;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void stampaLista(listnode *pnt){&lt;br /&gt;
&lt;br /&gt;
	while(pnt-&amp;gt;next!=NULL){&lt;br /&gt;
		printf(&amp;quot;%d\n&amp;quot;,pnt-&amp;gt;inode);&lt;br /&gt;
		pnt=pnt-&amp;gt;next;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Problema: Se come parametro gli passo l'indirizzo di una directory diverso da quella in cui si trova il file.c, non funziona, o meglio esegue, termina ma non trova alcun file all'interno della directory (anche se sono sicuro che i file ci sono).&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1,_prova_pratica_20.06.2013&amp;diff=903</id>
		<title>Esercizio 1, prova pratica 20.06.2013</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1,_prova_pratica_20.06.2013&amp;diff=903"/>
		<updated>2015-03-15T12:29:32Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: Created page with &amp;quot;&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt; Scrivere un programma che stampi il numero di inode di ogni file presente in una direcotory passata come argomento (o della direcotry corrente se il progr...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Scrivere un programma che stampi il numero di inode di ogni file presente in una direcotory passata come argomento (o della&lt;br /&gt;
direcotry corrente se il programma viene chiamato senza parametri) e stampi l'elenco in ordine crescente di numero di i-node.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&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;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;dirent.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct listnode {  //struttura dati per contenere tutti gli inode dei file di una directory&lt;br /&gt;
struct listnode *next;&lt;br /&gt;
int inode;&lt;br /&gt;
}listnode;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]){&lt;br /&gt;
struct stat fileStat;&lt;br /&gt;
int contanode=0;&lt;br /&gt;
char *filename=argv[1];&lt;br /&gt;
struct stat tp;&lt;br /&gt;
DIR *path;&lt;br /&gt;
struct dirent *dir_object;&lt;br /&gt;
path = opendir(argv[1]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
listnode *root;&lt;br /&gt;
root = (listnode*)calloc(1, sizeof(listnode));&lt;br /&gt;
listnode *tmp=root;&lt;br /&gt;
dir_object = readdir(path); //comincia la scansione della cartella&lt;br /&gt;
	while(dir_object != NULL){&lt;br /&gt;
&lt;br /&gt;
		stat(dir_object-&amp;gt;d_name, &amp;amp;tp);&lt;br /&gt;
			if (S_ISREG(tp.st_mode)){	//l'oggetto dir_object é un file,quindi lo salvo nella struttura&lt;br /&gt;
				contanode++;&lt;br /&gt;
				stat(dir_object-&amp;gt;d_name, &amp;amp;fileStat);&lt;br /&gt;
				tmp-&amp;gt;inode=(fileStat.st_ino);&lt;br /&gt;
				tmp-&amp;gt;next=(listnode*)calloc(1, sizeof(listnode));&lt;br /&gt;
				tmp=tmp-&amp;gt;next;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
		dir_object = readdir(path);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;, contanode);&lt;br /&gt;
ordinaLista(root);&lt;br /&gt;
stampaLista(root);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void ordinaLista(listnode *pnt){&lt;br /&gt;
&lt;br /&gt;
listnode *tmp=pnt;&lt;br /&gt;
int temp;&lt;br /&gt;
	while(tmp-&amp;gt;next!=NULL){&lt;br /&gt;
		&lt;br /&gt;
		while(pnt-&amp;gt;next!=NULL){&lt;br /&gt;
		if(pnt-&amp;gt;inode&amp;lt;tmp-&amp;gt;inode){&lt;br /&gt;
			temp=pnt-&amp;gt;inode;&lt;br /&gt;
			pnt-&amp;gt;inode=tmp-&amp;gt;inode;&lt;br /&gt;
			tmp-&amp;gt;inode=temp;&lt;br /&gt;
			}&lt;br /&gt;
		else{&lt;br /&gt;
		pnt=pnt-&amp;gt;next;&lt;br /&gt;
		}&lt;br /&gt;
		}&lt;br /&gt;
	tmp=tmp-&amp;gt;next;&lt;br /&gt;
	pnt=tmp;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void stampaLista(listnode *pnt){&lt;br /&gt;
&lt;br /&gt;
	while(pnt-&amp;gt;next!=NULL){&lt;br /&gt;
		printf(&amp;quot;%d\n&amp;quot;,pnt-&amp;gt;inode);&lt;br /&gt;
		pnt=pnt-&amp;gt;next;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Problema: Se come parametro gli passo l'indirizzo di una directory diverso da quella in cui si trova il file.c, non funziona, o meglio esegue, termina ma non trova alcun file all'interno della directory (anche se sono sicuro che i file ci sono).&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=902</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=902"/>
		<updated>2015-03-15T12:25:11Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di Sistemi Operativi&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 20.06.2013]]&lt;br /&gt;
&lt;br /&gt;
[[Prova_pratica_21_01_15]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 17.06.2014]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1 - 25.09.2014]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 20/02/2014]]&lt;br /&gt;
&lt;br /&gt;
[[Demone ruba input]]&lt;br /&gt;
&lt;br /&gt;
[[wifi daemon]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 13/09/2013]]&lt;br /&gt;
&lt;br /&gt;
[[Problema Dei Filosofi]]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unibo.it/~renzo/so/portability.tgz portability.tgz]&lt;br /&gt;
&lt;br /&gt;
[[listx.h commentato + esempio su container_of]]&lt;br /&gt;
&lt;br /&gt;
[[Congettura di Goldbach]]&lt;br /&gt;
&lt;br /&gt;
[[list segments]]&lt;br /&gt;
&lt;br /&gt;
[[Execv/fork su file aperto]]&lt;br /&gt;
&lt;br /&gt;
[[Angry_Children]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 12/02/2009]]&lt;br /&gt;
&lt;br /&gt;
[[(Programma C) Un quadrato nella matrice]]&lt;br /&gt;
&lt;br /&gt;
[[&amp;quot;classi&amp;quot;_in_C]]&lt;br /&gt;
&lt;br /&gt;
[[Esempi del 02 dicembre 2014]]&lt;br /&gt;
&lt;br /&gt;
[[Materiale dell'AA 2013-14]]&lt;br /&gt;
----&lt;br /&gt;
Ricordate che per creare un account o quando viene richiesto di risolvere un semplice calcolo occorre ricordare quanto scritto [[qui]]&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1,_prova_pratica_20/02/2014&amp;diff=887</id>
		<title>Esercizio 1, prova pratica 20/02/2014</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1,_prova_pratica_20/02/2014&amp;diff=887"/>
		<updated>2015-03-03T21:11:56Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: Created page with &amp;quot;==Soluzione di DBoldrin== &amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt; #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;string.h&amp;gt;   int main(int argc, char* argv[]){    FILE *fp;    char* pathname = arg...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Soluzione di DBoldrin==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&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;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
int main(int argc, char* argv[]){&lt;br /&gt;
   FILE *fp;&lt;br /&gt;
   char* pathname = argv[1];&lt;br /&gt;
   int contachar=0;&lt;br /&gt;
   int contacolonna=0;&lt;br /&gt;
   char carattere[2];&lt;br /&gt;
   int n=atoi(argv[argc-1]);&lt;br /&gt;
   int c;&lt;br /&gt;
&lt;br /&gt;
   fp = fopen(pathname,&amp;quot;r&amp;quot;); // read mode&lt;br /&gt;
 &lt;br /&gt;
   if( fp == NULL )&lt;br /&gt;
   {&lt;br /&gt;
      perror(&amp;quot;Error while opening the file.\n&amp;quot;);&lt;br /&gt;
      exit(EXIT_FAILURE);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   printf(&amp;quot;il numero di elementi nella colonna %d del file %s sono:\n&amp;quot;,n,pathname);&lt;br /&gt;
 &lt;br /&gt;
  while ((c= getc(fp)) != EOF) {&lt;br /&gt;
        if ((carattere[1] = c) == '\n')&lt;br /&gt;
		contacolonna=0;      &lt;br /&gt;
    else&lt;br /&gt;
	contacolonna++;&lt;br /&gt;
	if(contacolonna==n){&lt;br /&gt;
		contachar++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}	&lt;br /&gt;
	printf(&amp;quot;%d\n&amp;quot;,contachar);&lt;br /&gt;
   fclose(fp);&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=886</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=886"/>
		<updated>2015-03-03T21:10:02Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di Sistemi Operativi&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 20/02/2014]]&lt;br /&gt;
&lt;br /&gt;
[[Demone ruba input]]&lt;br /&gt;
&lt;br /&gt;
[[wifi daemon]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 13/09/2013]]&lt;br /&gt;
&lt;br /&gt;
[[Problema Dei Filosofi]]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unibo.it/~renzo/so/portability.tgz portability.tgz]&lt;br /&gt;
&lt;br /&gt;
[[listx.h commentato + esempio su container_of]]&lt;br /&gt;
&lt;br /&gt;
[[Congettura di Goldbach]]&lt;br /&gt;
&lt;br /&gt;
[[list segments]]&lt;br /&gt;
&lt;br /&gt;
[[Execv/fork su file aperto]]&lt;br /&gt;
&lt;br /&gt;
[[Angry_Children]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 12/02/2009]]&lt;br /&gt;
&lt;br /&gt;
[[(Programma C) Un quadrato nella matrice]]&lt;br /&gt;
&lt;br /&gt;
[[&amp;quot;classi&amp;quot;_in_C]]&lt;br /&gt;
&lt;br /&gt;
[[Esempi del 02 dicembre 2014]]&lt;br /&gt;
&lt;br /&gt;
[[Materiale dell'AA 2013-14]]&lt;br /&gt;
----&lt;br /&gt;
Ricordate che per creare un account o quando viene richiesto di risolvere un semplice calcolo occorre ricordare quanto scritto [[qui]]&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Congettura_di_Goldbach&amp;diff=864</id>
		<title>Congettura di Goldbach</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Congettura_di_Goldbach&amp;diff=864"/>
		<updated>2014-12-08T16:11:51Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: /* Soluzione di BoldrinD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nel 1742 Christian Goldbach, un matematico amatoriale tedesco, scrisse una lettera a Leonardo Eulero, in cui fece la seguente congettura:&lt;br /&gt;
&lt;br /&gt;
Ogni numero pari maggiore di 4 può essere scritto &lt;br /&gt;
come la somma di due numeri primi dispari.&lt;br /&gt;
Per esempio:&lt;br /&gt;
&lt;br /&gt;
8 = 3 + 5. Sia 3 che 5 sono numeri primi dispari.&lt;br /&gt;
&lt;br /&gt;
20 = 3 + 17 = 7 + 13.&lt;br /&gt;
&lt;br /&gt;
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23.&lt;br /&gt;
&lt;br /&gt;
Ad oggi non si sa ancora se la congettura sia corretta.&lt;br /&gt;
&lt;br /&gt;
==Soluzione di BoldrinD==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
int valoreinput=0;&lt;br /&gt;
int valoreprimo=0;&lt;br /&gt;
int valoresecondo=0;&lt;br /&gt;
&lt;br /&gt;
int isprime(int a){&lt;br /&gt;
&lt;br /&gt;
	if (!(a % 2)) return 0;&lt;br /&gt;
	int i;&lt;br /&gt;
	for (i = 3; i &amp;lt;= ((a/2)+1); i +=2)&lt;br /&gt;
	if (!(a % i))&lt;br /&gt;
	return 0;&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int calcoloprimo(int val){&lt;br /&gt;
	int trovato=0;&lt;br /&gt;
	&lt;br /&gt;
	while(trovato==0){&lt;br /&gt;
	val--;&lt;br /&gt;
	trovato = isprime(val);&lt;br /&gt;
&lt;br /&gt;
	if (trovato==1){&lt;br /&gt;
		valoreprimo=val;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		calcoloprimo(val);&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
int valoresecondo = valoreinput-valoreprimo;&lt;br /&gt;
&lt;br /&gt;
int trovatosec=0;&lt;br /&gt;
	trovatosec = isprime(valoresecondo);&lt;br /&gt;
	if(trovatosec==1 &amp;amp;&amp;amp; valoreprimo+valoresecondo == valoreinput &amp;amp;&amp;amp; valoresecondo!=1){	&lt;br /&gt;
		return valoresecondo;&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		calcoloprimo(valoreprimo);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
&lt;br /&gt;
valoreinput = atoi(argv[1]);&lt;br /&gt;
valoresecondo=calcoloprimo(valoreinput);&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;,valoreprimo);&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;,valoresecondo);		&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice è privo di alcuni controlli sull'input, si assume che il valore dato in input sia pari e &amp;gt;=4.&lt;br /&gt;
il problema???? dopo essere arrivati all'input 2996, il costo dell'esecuzione diventa eccessivo.&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Congettura_di_Goldbach&amp;diff=863</id>
		<title>Congettura di Goldbach</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Congettura_di_Goldbach&amp;diff=863"/>
		<updated>2014-12-08T16:09:34Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: Created page with &amp;quot;Nel 1742 Christian Goldbach, un matematico amatoriale tedesco, scrisse una lettera a Leonardo Eulero, in cui fece la seguente congettura:  Ogni numero pari maggiore di 4 può ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nel 1742 Christian Goldbach, un matematico amatoriale tedesco, scrisse una lettera a Leonardo Eulero, in cui fece la seguente congettura:&lt;br /&gt;
&lt;br /&gt;
Ogni numero pari maggiore di 4 può essere scritto &lt;br /&gt;
come la somma di due numeri primi dispari.&lt;br /&gt;
Per esempio:&lt;br /&gt;
&lt;br /&gt;
8 = 3 + 5. Sia 3 che 5 sono numeri primi dispari.&lt;br /&gt;
&lt;br /&gt;
20 = 3 + 17 = 7 + 13.&lt;br /&gt;
&lt;br /&gt;
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23.&lt;br /&gt;
&lt;br /&gt;
Ad oggi non si sa ancora se la congettura sia corretta.&lt;br /&gt;
&lt;br /&gt;
==Soluzione di BoldrinD==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
int valoreinput=0;&lt;br /&gt;
int valoreprimo=0;&lt;br /&gt;
int valoresecondo=0;&lt;br /&gt;
&lt;br /&gt;
void calcolosecondo(int val);&lt;br /&gt;
&lt;br /&gt;
int isprime(int a){&lt;br /&gt;
&lt;br /&gt;
	if (!(a % 2)) return 0;&lt;br /&gt;
	int i;&lt;br /&gt;
	for (i = 3; i &amp;lt;= ((a/2)+1); i +=2)&lt;br /&gt;
	if (!(a % i))&lt;br /&gt;
	return 0;&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int calcoloprimo(int val){&lt;br /&gt;
	int trovato=0;&lt;br /&gt;
	&lt;br /&gt;
	while(trovato==0){&lt;br /&gt;
	val--;&lt;br /&gt;
	trovato = isprime(val);&lt;br /&gt;
&lt;br /&gt;
	if (trovato==1){&lt;br /&gt;
		valoreprimo=val;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		calcoloprimo(val);&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
int valoresecondo = valoreinput-valoreprimo;&lt;br /&gt;
&lt;br /&gt;
int trovatosec=0;&lt;br /&gt;
	trovatosec = isprime(valoresecondo);&lt;br /&gt;
	if(trovatosec==1 &amp;amp;&amp;amp; valoreprimo+valoresecondo == valoreinput &amp;amp;&amp;amp; valoresecondo!=1){	&lt;br /&gt;
		return valoresecondo;&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		calcoloprimo(valoreprimo);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
&lt;br /&gt;
valoreinput = atoi(argv[1]);&lt;br /&gt;
valoresecondo=calcoloprimo(valoreinput);&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;,valoreprimo);&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;,valoresecondo);		&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il codice è privo di alcuni controlli sull'input, si assume che il valore dato in input sia pari e &amp;gt;=4.&lt;br /&gt;
il problema???? dopo essere arrivati all'input 2996, il costo dell'esecuzione diventa eccessivo.&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=862</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=862"/>
		<updated>2014-12-08T15:58:58Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di Sistemi Operativi&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unibo.it/~renzo/so/portability.tgz portability.tgz]&lt;br /&gt;
&lt;br /&gt;
[[Congettura di Goldbach]]&lt;br /&gt;
&lt;br /&gt;
[[list segments]]&lt;br /&gt;
&lt;br /&gt;
[[Execv/fork su file aperto]]&lt;br /&gt;
&lt;br /&gt;
[[Angry_Children]]&lt;br /&gt;
&lt;br /&gt;
[[Esercizio 1, prova pratica 12/02/2009]]&lt;br /&gt;
&lt;br /&gt;
[[(Programma C) Un quadrato nella matrice]]&lt;br /&gt;
&lt;br /&gt;
[[&amp;quot;classi&amp;quot;_in_C]]&lt;br /&gt;
&lt;br /&gt;
[[Esempi del 02 dicembre 2014]]&lt;br /&gt;
&lt;br /&gt;
[[Materiale dell'AA 2013-14]]&lt;br /&gt;
----&lt;br /&gt;
Ricordate che per creare un account o quando viene richiesto di risolvere un semplice calcolo occorre ricordare quanto scritto [[qui]]&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1,_prova_pratica_12/02/2009&amp;diff=836</id>
		<title>Esercizio 1, prova pratica 12/02/2009</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1,_prova_pratica_12/02/2009&amp;diff=836"/>
		<updated>2014-11-26T18:38:01Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ho provato a svolgere l'esercizio 1 dell'esame di laboratorio del 2 febbraio 2009 ([http://www.cs.unibo.it/~renzo/so/pratiche/2009.02.12.pdf]).&lt;br /&gt;
&lt;br /&gt;
Consegna:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Esercizio1 (obbligatorio): (10 punti)&lt;br /&gt;
Scrivere un programma C denominato “invarg” che esegua il programma passato come parametro invertendo gli argomenti.&lt;br /&gt;
Esempio:&lt;br /&gt;
invarg cat a b c&lt;br /&gt;
deve avere l'effetto di&lt;br /&gt;
cat c b a&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Soluzione di Maldus==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&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;
int main(int argc , char* argv[]){&lt;br /&gt;
	char *nargv[argc-1] ;	/*nargv è il vettore degli argomenti da passare al programma da eseguire*/&lt;br /&gt;
	int i , j ;		/*puntatori che scorrono, rispettivamente, argv ed nargv per riempire correttamente nargv*/&lt;br /&gt;
	nargv[0] = argv[1] ;	/*il primo valore di nargv deve essere il programma chiamato, l'ultimo deve essere NULL*/&lt;br /&gt;
	nargv[argc-1] = NULL ;&lt;br /&gt;
	for( i = argc - 1 , j = 1 ; i &amp;gt; 1 , j &amp;lt; (argc - 1) ; i-- , j++ ) nargv[j] = argv[i] ;	/*metto in nargv (dal secondo elemento in poi) gli argomenti presenti &lt;br /&gt;
in argv in ordine invertito*/&lt;br /&gt;
	execvp( nargv[0] , nargv  ) ;	/*eseguo il programma (il cui nome è contenuto in nargv[0]) passandogli nargv come vettore di parametri*/&lt;br /&gt;
	fprintf( stderr , &amp;quot;programma errato\n&amp;quot; ) ;	/*se ci troviamo in questo punto significa che la chiamata a execvp è fallita, probabilmente&lt;br /&gt;
 perchè il programma indicato non è stato trovato*/&lt;br /&gt;
	exit(1) ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Soluzione di Eddy==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&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;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void scambia_ordine(int argc, char **argv, int j);&lt;br /&gt;
&lt;br /&gt;
int main(int argc , char* argv[])&lt;br /&gt;
{&lt;br /&gt;
	if (argc &amp;lt; 2) return 2;&lt;br /&gt;
	argv++;	argc--;&lt;br /&gt;
	scambia_ordine(argc, argv, 1);&lt;br /&gt;
	execvp(argv[0], argv);&lt;br /&gt;
	perror(&amp;quot;execvp&amp;quot;);&lt;br /&gt;
	return 3;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* piccola funzione ricorsiva che:&lt;br /&gt;
 * -memorizza in tmp gli argomenti dalla fine&lt;br /&gt;
 * -assegna ad argv in ordine inverso&lt;br /&gt;
 *&lt;br /&gt;
 *  non scambia il primo argomento&lt;br /&gt;
 */&lt;br /&gt;
void scambia_ordine(int argc, char **argv, int j)&lt;br /&gt;
{&lt;br /&gt;
	char *tmp;&lt;br /&gt;
	if (argc &amp;gt; 1){&lt;br /&gt;
		tmp = argv[argc-1];&lt;br /&gt;
		scambia_ordine (argc-1, argv, j+1);&lt;br /&gt;
		argv[j]=tmp;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[User:Eddy|Eddy]] ([[User talk:Eddy|talk]]) 21:00 Saturday, 22 November 2014 (CET)&lt;br /&gt;
&lt;br /&gt;
==Soluzione di GFede==&lt;br /&gt;
&amp;lt;source 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;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void scambia(int offset, int argc, char* argv[]);&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
   if(argc &amp;lt;= 1)&lt;br /&gt;
   {&lt;br /&gt;
      printf(&amp;quot;Usage: invarg.exe command [arguments...]\n&amp;quot;);&lt;br /&gt;
      return 2;&lt;br /&gt;
   }&lt;br /&gt;
   scambia(2, argc - 1, argv);&lt;br /&gt;
&lt;br /&gt;
   execvp(argv[1], argv + 1);&lt;br /&gt;
   perror(&amp;quot;execvp&amp;quot;);&lt;br /&gt;
   return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Scambia le stringhe all'interno dell'array&lt;br /&gt;
 * void scambia&lt;br /&gt;
 * int offset     Indice da cui iniziare a scambiare&lt;br /&gt;
 * int argc       Numero di valori nell'array (Compreso l'offset)&lt;br /&gt;
 * char* argv[]   array di stringhe da scambiare&lt;br /&gt;
 */&lt;br /&gt;
void scambia(int offset, int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
   int i;&lt;br /&gt;
   char* tmp;&lt;br /&gt;
   for( i = offset; i &amp;lt; argc - i + offset; i++ )&lt;br /&gt;
   {&lt;br /&gt;
      tmp = argv[i];&lt;br /&gt;
      argv[i] = argv[argc - i + offset];&lt;br /&gt;
      argv[argc - i + offset] = tmp;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Soluzione di LorenzoV==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void swap(char **p, char **q){		// La swap modifica solo i puntatori&lt;br /&gt;
	char *tmp;&lt;br /&gt;
	tmp=*p;&lt;br /&gt;
	*p=*q;&lt;br /&gt;
	*q=tmp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]){	&lt;br /&gt;
	char **begin, **end;&lt;br /&gt;
	if (argc&amp;lt;3){&lt;br /&gt;
		fprintf(stderr, &amp;quot;Usage:\n\t%s command ...arguments...\n&amp;quot;, argv[0]);&lt;br /&gt;
		exit(1);	&lt;br /&gt;
	}	&lt;br /&gt;
	begin=argv+2;&lt;br /&gt;
	end=argv+argc-1;&lt;br /&gt;
	while (begin&amp;lt;end){		// Inverte i parametri passati al comando&lt;br /&gt;
		swap(begin, end);&lt;br /&gt;
		begin++;&lt;br /&gt;
		end--;&lt;br /&gt;
	}&lt;br /&gt;
	execvp(argv[1], argv+1);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--[[User:LorenzoV|LorenzoV]] ([[User talk:LorenzoV|talk]]) 18:35, 25 November 2014 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Soluzione di BoldrinD==&lt;br /&gt;
&amp;lt;source 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;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void invarg(int Qparametri, char* Rargv[], char* argv[]);&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]){&lt;br /&gt;
	int Qparametri=argc-1;	&lt;br /&gt;
	char *Rargv[Qparametri];&lt;br /&gt;
	invarg(Qparametri, Rargv, argv);&lt;br /&gt;
	printf(&amp;quot;%s\n&amp;quot;,&amp;quot;il nuovo vettore dei parametri è stato creato con successo&amp;quot;);&lt;br /&gt;
   	execvp(Rargv[0], Rargv);&lt;br /&gt;
  	 perror(&amp;quot;execvp&amp;quot;);&lt;br /&gt;
   return 1;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void invarg(int Qparametri, char* Rargv[], char* argv[]){&lt;br /&gt;
	Rargv[0]=argv[1];&lt;br /&gt;
	Rargv[Qparametri]=NULL;&lt;br /&gt;
	int i=2;&lt;br /&gt;
		while(argv[i]!=NULL){&lt;br /&gt;
		Rargv[Qparametri-1]=(argv[i]);&lt;br /&gt;
		i++;&lt;br /&gt;
		Qparametri--;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Talk:Esercizio_1,_prova_pratica_12/02/2009&amp;diff=835</id>
		<title>Talk:Esercizio 1, prova pratica 12/02/2009</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Talk:Esercizio_1,_prova_pratica_12/02/2009&amp;diff=835"/>
		<updated>2014-11-26T11:43:11Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Talk:Esercizio_1,_prova_pratica_12/02/2009&amp;diff=834</id>
		<title>Talk:Esercizio 1, prova pratica 12/02/2009</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Talk:Esercizio_1,_prova_pratica_12/02/2009&amp;diff=834"/>
		<updated>2014-11-26T11:42:30Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: Created page with &amp;quot;#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;unistd.h&amp;gt; #include &amp;lt;errno.h&amp;gt;  void invarg(int Qparametri, char* Rargv[], char* argv[]);  int main(int argc, char* argv[]){ 	int Qparametri=argc-1;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void invarg(int Qparametri, char* Rargv[], char* argv[]);&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]){&lt;br /&gt;
	int Qparametri=argc-1;	&lt;br /&gt;
	char *Rargv[Qparametri];&lt;br /&gt;
	invarg(Qparametri, Rargv, argv);&lt;br /&gt;
	printf(&amp;quot;%s\n&amp;quot;,&amp;quot;il nuovo vettore dei parametri è stato creato con successo&amp;quot;);&lt;br /&gt;
   	execvp(Rargv[0], Rargv);&lt;br /&gt;
  	 perror(&amp;quot;execvp&amp;quot;);&lt;br /&gt;
   return 1;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void invarg(int Qparametri, char* Rargv[], char* argv[]){&lt;br /&gt;
	Rargv[0]=argv[1];&lt;br /&gt;
	Rargv[Qparametri]=NULL;&lt;br /&gt;
	int i=2;&lt;br /&gt;
		while(argv[i]!=NULL){&lt;br /&gt;
		Rargv[Qparametri-1]=(argv[i]);&lt;br /&gt;
		i++;&lt;br /&gt;
		Qparametri--;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Davide.boldrin&amp;diff=833</id>
		<title>User talk:Davide.boldrin</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Davide.boldrin&amp;diff=833"/>
		<updated>2014-11-26T11:41:41Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Davide.boldrin&amp;diff=832</id>
		<title>User talk:Davide.boldrin</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Davide.boldrin&amp;diff=832"/>
		<updated>2014-11-26T11:40:33Z</updated>

		<summary type="html">&lt;p&gt;Davide.boldrin: Created page with &amp;quot;#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;unistd.h&amp;gt; #include &amp;lt;errno.h&amp;gt;  void invarg(int Qparametri, char* Rargv[], char* argv[]);  int main(int argc, char* argv[]){ 	int Qparametri=argc-1;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void invarg(int Qparametri, char* Rargv[], char* argv[]);&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]){&lt;br /&gt;
	int Qparametri=argc-1;	&lt;br /&gt;
	char *Rargv[Qparametri];&lt;br /&gt;
	invarg(Qparametri, Rargv, argv);&lt;br /&gt;
	printf(&amp;quot;%s\n&amp;quot;,&amp;quot;il nuovo vettore dei parametri è stato creato con successo&amp;quot;);&lt;br /&gt;
   	execvp(Rargv[0], Rargv);&lt;br /&gt;
  	 perror(&amp;quot;execvp&amp;quot;);&lt;br /&gt;
   return 1;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void invarg(int Qparametri, char* Rargv[], char* argv[]){&lt;br /&gt;
	Rargv[0]=argv[1];&lt;br /&gt;
	Rargv[Qparametri]=NULL;&lt;br /&gt;
	int i=2;&lt;br /&gt;
		while(argv[i]!=NULL){&lt;br /&gt;
		Rargv[Qparametri-1]=(argv[i]);&lt;br /&gt;
		i++;&lt;br /&gt;
		Qparametri--;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Davide.boldrin</name></author>
	</entry>
</feed>