<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FireTeam &#187; file</title>
	<atom:link href="http://www.fireteam.it/tag/file/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fireteam.it</link>
	<description>#fuoco@AzzurraNet</description>
	<lastBuildDate>Tue, 16 Mar 2010 15:55:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Nascondere i propri file</title>
		<link>http://www.fireteam.it/2009/09/nascondere-i-propri-file/</link>
		<comments>http://www.fireteam.it/2009/09/nascondere-i-propri-file/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 20:30:19 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Sicurezza e Privatezza]]></category>
		<category><![CDATA[crittografia]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[protezione]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/?p=677</guid>
		<description><![CDATA[Quante volte abbiamo desiderato di nascondere i nostri file da occhi curiosi?
Questo articolo tratta come nascondere file con un sistema operativo Windows&#8230; gli utenti degli altri sistemi operativi non avranno difficoltà ad applicare gli stessiconcetti, specialmente gli utenti Linux hanno a disposizione moltissimi tool gratuiti per nascondere o crittare file.
Cominciamo subito ad introdurre una tecnica [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-691" title="nascondino" src="http://www.fireteam.it/wp-content/uploads/2009/09/nascondino-254x300.jpg" alt="nascondino" width="254" height="300" />Quante volte abbiamo desiderato di nascondere i nostri file da occhi curiosi?<br />
Questo articolo tratta come nascondere file con un sistema operativo Windows&#8230; gli utenti degli altri sistemi operativi non avranno difficoltà ad applicare gli stessiconcetti, specialmente gli utenti Linux hanno a disposizione moltissimi tool gratuiti per nascondere o crittare file.</p>
<p>Cominciamo subito ad introdurre una tecnica stupida che consente di proteggere al 98% il vostro amato file (che sia di testo o un video o quello che sia). Non serve semplicemente nascondere un file cambiando semplicemente gli attributi (Il file può essere sempre raggiunto dalla SHELL), è un trucco facilmente raggirabile.</p>
<h2>Doppio cambio dell&#8217;estensione con compressione</h2>
<p>Ammettiamo di aver un file di nome <strong>pippo.txt</strong> che contiene dati personali e password di alcuni siti, immaginiamo anche che il pc che usiamo lo utilizza anche il vicino di casa(cosa improbabile però mi serve per l&#8217;esempio)&#8230;</p>
<p>Il nostro vantaggio sta nel poter manipolare le estensioni dei file, infatti possiamo sfruttare gia l&#8217;estensione per camuffare il file, quindi, cominciamo a rinominare il file <strong>pippo.txt</strong> in <strong>pippo.dll</strong>: fatto questo abbiamo ottenuto un file con un icona diversa(quando in realtà è un normale file ASCII)&#8230; Siamo leggermente + tranquilli ma non basta!<br />
Utilizziamo un programma di compressione come WinZip o qualcosa di free come IzArc. Adesso creiamo un nuovo archivio protetto da password che conterrà il nostro file pippo.dll(Scegliete una buona password).</p>
<p><span id="more-677"></span></p>
<p>Fatto questo, vi ritroverete con un file <strong>pippo.zip</strong>; in realtà possiamo gia tranquillizzarci, Ma per rendere le cose irriconoscibili facciamo un altra operazione di rename: da pippo.zip a <span style="text-decoration: underline;">pippo.dll</span> e rimettiamo il nuovo <span style="text-decoration: underline;">pippo.dll</span> in un altro archivio compresso.<br />
Come potete vedere abbiamo fatto un lungo procedimento al fine di rendere il file di origine irriconoscibile agli occhi di un curioso!</p>
<h2>Metodo Crittografico</h2>
<p>Abbiamo precedentemente detto che il cambio dell&#8217;estensione è una tecnica sicura al 98%, infatti persone esperte sanno riconoscere il tipo di file indipendentemente dal nome o dall&#8217;estensione del file. La distribuzione Linux Helix è piena di tool capaci di eseguire questo compito in maniera automatica&#8230; possiamo zippare il file anche 1000 volte!</p>
<p>Per nascondere il file possiamo ricorrere alla crittografia, ed utilizzare programmi come TrueCrypt, Kruptos 2, Androsa File Protector, ed altri! Ad esempio TrueCrypt (<a href="http://www.truecrypt.org">http://www.truecrypt.org</a>) è il programma di riferimento open source per la cifratura e la protezione dei dati personali. Permette di criptare file, cartelle e intere partizioni con i più famosi algoritmi di cifratura a 256 bit (AES, Twofish, Serpent), utilizzando anche 2 di questi algoritmi contemporaneamente. Il programma è in grado di creare un volume criptato nascosto all&#8217;interno di un altro volume criptato, in modo da lasciare un&#8217;area di sicurezza invisibile anche nel caso si sia costretti a rivelare la password (questa funzionalità è solo per utenti esperti, dal momento che se non si è capaci si rischia di perdere tutti i dati del volume nascosto).<br />
Il volume da criptare potrà avere qualsiasi estensione vogliamo (.txt, .rar, .zip, .iso, .mp3, .jpg, ecc., o anche nessuna estensione): solo TrueCrypt -e con la giusta password- sarà in grado di aprirlo. Inoltre, non è nemmeno possibile stabilire che il file che abbiamo cifrato sia stato criptato con TreuCrypt (questo è un passo ulteriore verso la riservatezza).<br />
Truecrypt non ha bisogno di installazione: si può lanciare da qualunque periferica e utilizzare per aprire -per esempio- qualche volume criptato all&#8217;interno del disco rigido.<br />
A scanso di equivoci, ricordo che il criptare una partizione può avere effetti devastanti se non si comprende quello che si fa; prima di combinare danni irreparabili, è bene pensare molto bene prima di agire.</p>
<p>Per nascondere (crittare) semplicemente del testo, come le nostre email, è disponibile GPG (versione open source di PGP), un tool open source molto potente <img src='http://www.fireteam.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Camuffare il File</h2>
<p>Una tecnica molto sorprendente, e abbastanza difficile da rilevare, è quella di nascondere il proprio file all&#8217;interno di una immagine o di un video.<br />
A tale scopo c&#8217;è Camouflage scaricabile gratuitamente da <a href="http://camouflage.unfiction.com">http://camouflage.unfiction.com</a>, è un programma che consente di nascondere i propri file personali “Top Secret” all’ interno di altri file, ad esempio un documento di testo dentro a un’ immagine, dentro a un MP3, dentro a un video e viceversa.<br />
Risulta utile per tutelare la propria privacy, in questo modo informazioni di una certa importanza potranno essere celate dentro un comune file e magari lasciato tranquillamente in bella vista nel desktop, senza destare sospetti e completamente al sicuro.</p>
<p>Semplice da utilizzare, nel menu contestuale del mouse una volta cliccato un file con il tasto destro, vengono aggiunte due nuove voci: Camouflage e Uncamouflage.</p>
<ul>
<li>Camouflage: per nascondere il file Top Secret dentro un altro file.</li>
<li>Uncamouflage: per estrarre il file Top Secret dal file.</li>
</ul>
<p>Per nascondere il file Top Secret, occorre cliccarlo con il tasto destro del mouse e dal menu contestuale selezionare la voce Camouflage. Verrà visualizzata la finestra di Camouflage, selezionare il file Top Secret e confermare cliccando Next.<br />
A questo punto occorre selezionare il file dentro al quale si vuole nascondere il file Top Secret, ad esempio un’ immagine o una canzone. Confermare cliccando il pulsante Next. Verrà visualizzata l’ opzione Create This File dove eventualmente selezionare la destinazione di salvataggio del file con il contenuto Top Secret. Confermare cliccando Next. Infine, viene visualizzata la finestra nella quale inserire una password di protezione del file Top Secret. Inserire una password facile da ricordare per evitare spiacevoli dimenticanze.<br />
Al termine confermare cliccando Finish. Il file Top Secret è stato nascosto dentro al comune e insospettabile file, che fra l’ altro può essere utilizzato normalmente.<br />
Per estrarre il file Top Secret, cliccare il file in cui è nascosto con il tasto destro del mouse e dal menu contestuale selezionare la voce Uncamouflage, quindi inserire e confermare la password.</p>
<p>Spero di aver salvato i dati della postepay di qualcuno&#8230; ciao alla prossima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/09/nascondere-i-propri-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestione dei File nel linguaggio C</title>
		<link>http://www.fireteam.it/2009/07/gestione-dei-file-nel-linguaggio-c/</link>
		<comments>http://www.fireteam.it/2009/07/gestione-dei-file-nel-linguaggio-c/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 16:25:58 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Programmazione C]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[file]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/?p=384</guid>
		<description><![CDATA[Input /output e gestione dei file
Iniziamo la lezione dicendo subito che per INPUT/OUTPUT si intende l’ insieme delle operazioni di
ingresso ed uscita, ossia lo scambio di informazioni tra il programma e le unita’ periferiche del
calcolatore.
Nel linguaggio C l’ I/O e’ interamente implementato mediante funzioni della libreria standard.
Il linguaggio C vede i file come un flusso [...]]]></description>
			<content:encoded><![CDATA[<h2>Input /output e gestione dei file</h2>
<p>Iniziamo la lezione dicendo subito che per INPUT/OUTPUT si intende l’ insieme delle operazioni di<br />
ingresso ed uscita, ossia lo scambio di informazioni tra il programma e le unita’ periferiche del<br />
calcolatore.<br />
Nel linguaggio C l’ I/O e’ interamente implementato mediante funzioni della libreria standard.<br />
Il linguaggio C vede i file come un flusso (stream) sequenziale di byte. Uno stream dal punto di vista<br />
tecnico e’ una implementazione software in grado di gestire le informazioni relative all’interazione a<br />
basso livello con la periferica associata, in modo che il programma possa trascurare di che periferica si<br />
tratti.<br />
Ogni file termina con un marcatore di fine file detto<br />
EOF( end-of-file) definito in &lt;stdio.h&gt; come una costante simbolica uguale a -1.</p>
<p><span id="more-384"></span></p>
<h2>I file e gli stream</h2>
<p>Un file e&#8217; una sequenza di lunghezza non prefissata di valori dello stesso tipo.<br />
Quando un file viene aperto sara’ associato uno stream . Tre file e i loro rispettivi stream, lo standard di<br />
input, lo standard di output, lo standard error (stdin, stdout, stderr) , sono aperti automaticamente<br />
quando inizia l’esecuzione di un programma.<br />
Lo stream dello standard di input consente ad un programma di ricevere input dalla tastiera. (puo’<br />
essere rediretto su altre periferiche).<br />
Lo stream dello standard di output consente ad un programma di di scrivere sul video della<br />
macchina.(puo’ essere rediretto su altre periferiche)<br />
Lo stream dello standard di errore consente ad un programma di scrivere sul video della macchina.<br />
(non puo’ essere rediretto su altre periferiche).<br />
Un programma C puo’ servirsi degli stream standard ; basta che vi compaia la direttiva<br />
#include&lt;stdio.h&gt;<br />
Gli stream forniscono un canale di comunicazione tra i file ed i programmi.<br />
L’apertura di un file restituisce un puntatore ad una struttura FILE (definita in &lt;stdio.h&gt;) che contiene<br />
le informazioni utilizzate per elaborare il file. La struttura FILE ha un file descriptor (descrittore di<br />
file), cioe’ l’indice di un vettore del S.O. chiamata open file table (tabella dei file aperti). Ogni<br />
elemento del vettore contiene un file control block o FCB (blocco di controllo del file) il quale viene<br />
utilizzato dal S.O. per amministrare un particolare file.<br />
Consideriamo due tipi di file i file di testo ed i file binari; i primi utilizzati quando l&#8217;informazione da<br />
memorizzarvi e&#8217; di tipo testo cioe&#8217; sequenze di caratteri; i secondi quando si vuole memorizzare nel file<br />
dati di un generico tipo (interi,strutture ecc&#8230;).</p>
<h2>Il puntatore al file</h2>
<p>Attraverso la definizione<br />
FILE *fp;<br />
viene permessa l’associazione di un identificatore del programma ad un file, che si trova in memoria<br />
secondaria.<br />
Con la sola definizione, fp e’ soltanto una “variabile di tipo FILE”; l’effettiva associazione avviene in<br />
fase di apertura del file.<br />
Il puntatore fp punta ad informazioni che descrivono alcune caratteristiche dei file come il nome, lo<br />
stato e la posizione corrente.<br />
Scopo del puntatore al file e’ quello di identificare uno specifico file su disco e viene usato dal flusso<br />
associato per svolgere in modo corretto le operazioni di input/output.</p>
<h2>Apertura di un file</h2>
<p>Avendo la definizione FILE *fp;<br />
Per aprire il file di avente nome “dati.in” ed associarlo ad fp si esegue la seguente operazione di<br />
apertura:<br />
fp = fopen(“dati.in”, “r”);<br />
Vediamo che l’access mode “r” implica l’apertura del file dati.in, presente in memoria secondaria, in<br />
modalita’ di sola lettura.<br />
Il prototipo della fopen() e’:<br />
FILE *fopen(const char *nome_del_file, const char *modo);<br />
nome_del_file deve essere un puntatore ad una stringa di caratteri che costituisce un nome valido<br />
secondo quanto definito dal S.O. e puo’ includere un percorso (path); la stringa a cui punta il modo<br />
definisce la modalita’ con cui sara’ aperto il file.<br />
La fopen() restituisce un puntatore al file di tipo FILE oppure un puntatore nullo nel caso si verifichi un<br />
errore.<br />
Si puo’ pensare che quando il file viene aperto, vi sia un cursore che segna il punto di accesso<br />
all’interno del file (viene letto un dato in corrispondenza della posizione del cursore). Cosi all’apertura<br />
del file il cursore si posiziona all’inizio del file; quando viene letto un dato, il cursore va alla posizione<br />
successiva; alla prossima lettura viene letto il dato successivo eccetera.<br />
Un file puo’ essere aperto per operazioni di sola scrittura e sono necessarie le istruzioni:<br />
FILE *fp;<br />
fp = fopen(“dati.in”, “w”);<br />
e’ possibile aprire sia file di testo che file binari.<br />
Notare che conviene sempre nei programmi verificare che il file sia stato aperto correttamente (cioe’<br />
che la funzione fopen() abbia avuto successo).<br />
Per fare cio’ si deve usare, nel caso il file in uso fosse dati.in, un frammento di codice come il seguente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">FILE <span style="color: #339933;">*</span>fp<span style="color: #339933;">;</span>
 <span style="color: #993333;">char</span> nome_del_file <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> “dati_in”
 fp <span style="color: #339933;">=</span> fopen<span style="color: #009900;">&#40;</span>nome_del_file<span style="color: #339933;">,</span> “r”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>fp<span style="color: #339933;">!=</span>NULL<span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 <span style="color: #808080; font-style: italic;">/* istruzioni di utilizzo del file*/</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">else</span>
 <span style="color: #009900;">&#123;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span>“\n impossibile aprire il file”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>La istruzione di uscita exit(1) viene utilizzata soltanto se si e’ nel main() altrimenti se si e’ all’interno di<br />
una altra funzione, al suo posto si utilizza la return.</p>
<h2>Chiusura di un file</h2>
<p>Per chiudere un file precedentemente aperto con la fopen() si utilizza la funzione fclose().<br />
E’ molto importante chiudere tutti i file aperti in un programma prima che questi termini la sua<br />
esecuzione. Infatti l’operazione di chiusura scrive nel file fisico corrispondente possibili dati che siano<br />
rimasti nel buffer di scrittura.<br />
Il prototipo della fclose e’:<br />
int fclose(FILE *fp);<br />
in cui fp e’ il puntatore che restituisce la fopen().<br />
La fclose() tenta di chiudere il file puntato da fp e restituisce il valore 0 nel caso in cui la chiusura sia<br />
terminata con successo (altrimenti un valore diverso da 0 nel caso di chiusura fallita). Comunque di<br />
solito la fclose() da errore soltanto se un disco e’ stato tolto dall’unita’ di lettura prematuramente<br />
oppure quando non vi e’ piu’ spazio libero.</p>
<h2>Le modalita’ di accesso dei file</h2>
<p>La modalita’ di accesso (access mode) indica come si dovra’ collegare un file ad un identificatore del<br />
programma e come si potra’ usare quel file.<br />
Come visto sopra la modalita’ “r” implica che il file venga aperto soltanto in lettura (solo per leggerne i<br />
dati), se il file esiste naturalmente.<br />
Mentre con “w” si indica (ad esempio nella fopen(“dati.in”, “w”);) di aprire il file dati.in in modalita’<br />
di scrittura. Se il file esiste, nella memoria secondaria, i dati in esso contenuti saranno persi e sostituiti<br />
con i nuovi dati che vi scriveremo; se il file non esiste viene creato.<br />
Vediamo una lista con i valori previsti per l’argomento modo nella fopen(.. , ..)</p>
<ul>
<li> “r”                          Apre un file testuale esistente per sola lettura, posizionando il cursore all’inizio del file;</li>
<li> “w”                          Apre un file testuale per sola scrittura: se il file gia’ esiste i dati in esso contenuti vengono perduti; se il file non esiste ne viene creato uno nuovo;</li>
<li> “a”                          Apre un file di testuale esistente per scrittura, in modalita’ append; il cursore viene posizionato alla fine del file e si puo’ scrivere nel file solo in coda ai dati gia’ presenti; i dati gia presenti non vengono cancellati;</li>
<li> “r+”                         Apre un file testuale esistente in lettura e scrittura; il cursore viene posto all’inizio;</li>
<li> “w+”                         Apre un file testuale per lettura e scrittura; se il file gia’ esiste i dati in esso contenuti vengono perduti; se il file non esiste, ne viene creato uno nuovo;</li>
<li> “a+”                         Apre un file testuale in modalita’ append; se il file non esiste, ne viene creato uno nuovo; si possono leggere tutti i dati del file; si possono scrivere dati solo in fondo al file.</li>
<li> “rb”                         Apre un file binario esistente per sola lettura, posizionando il cursore all’inizio;</li>
<li> “wb”                         Apre un file binario per sola scrittura; se il file gia’ esiste i dati in esso contenuti vengono persi; se il file non esiste , ne viene creato uno nuovo;</li>
<li> “ab”                         Apre o crea un file binario per scrittura in modalita’ append; il cursore viene posizionato alla fine del file e si puo’ scrivere nel file solo in coda ai dati gia’ presenti;</li>
<li> “rb+”                        Apre un file binario esistente in lettura e scrittura</li>
<li> “wb+”                        Apre o crea un file binario in lettura e scrittura</li>
<li> “ab+”                        Apre o crea in modalita’ append un file binario.</li>
</ul>
<h2>Creazione di un file sequenziale</h2>
<p>Vediamo un esempio di programma in cui utilizzeremo le funzioni fopen() ed fclose():</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* creare un file sequenziale*/</span>
 <span style="color: #339933;">#include&lt;stdio.h&gt;</span>
 <span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 <span style="color: #993333;">int</span> numero_di_conto<span style="color: #339933;">;</span>
 <span style="color: #993333;">char</span> nome<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">31</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #993333;">float</span> saldo<span style="color: #339933;">;</span>
 FILE <span style="color: #339933;">*</span>fpunt<span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* puntatore al file clienti.dat*/</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>fpunt <span style="color: #339933;">=</span> fopen<span style="color: #009900;">&#40;</span>“clienti.<span style="color: #202020;">dat</span>”<span style="color: #339933;">,</span> “w”<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">=</span> NULL<span style="color: #009900;">&#41;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span>“Il file non puo’ essere aperto\n”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span>“Inserite il numero di conto<span style="color: #339933;">,</span> il nome<span style="color: #339933;">,</span> ed il saldo.\n”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span>“inserite EOF per finire gli inserimenti\n”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span>“<span style="color: #339933;">?</span>”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 scanf<span style="color: #009900;">&#40;</span>“<span style="color: #339933;">%</span>d<span style="color: #339933;">%</span>s<span style="color: #339933;">%</span>f”<span style="color: #339933;">,&amp;</span>numero_di_conto<span style="color: #339933;">,</span> nome<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>saldo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>feof<span style="color: #009900;">&#40;</span>stdin<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 fprintf<span style="color: #009900;">&#40;</span>fpunt<span style="color: #339933;">,</span>”<span style="color: #339933;">%</span>d<span style="color: #339933;">%</span>s<span style="color: #339933;">%</span><span style="color:#800080;">.2f</span>\n”<span style="color: #339933;">,</span> numero_di_conto<span style="color: #339933;">,</span> nome<span style="color: #339933;">,</span> saldo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span>“<span style="color: #339933;">?</span>”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 scanf<span style="color: #009900;">&#40;</span>“<span style="color: #339933;">%</span>d<span style="color: #339933;">%</span>s<span style="color: #339933;">%</span>f”<span style="color: #339933;">,&amp;</span>numero_di_conto<span style="color: #339933;">,</span> nome<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>saldo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 fclose<span style="color: #009900;">&#40;</span>fpunt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Questo programma creera’ un semplice file ad accesso sequenziale di nome clienti.dat<br />
Nella schermata di input dovremo inserire ad esempio<br />
? 10 roberta 10,5<br />
? 11 roberto 22<br />
? 12 jennifer 30<br />
?<br />
ed EOF per terminare l’immissione di nuovi dati.<br />
Come anticipato FILE *fpunt stabilisce che fpunt e’ un puntatore ad una struttura FILE.<br />
La fprintf e’ analoga alla funzione printf soltanto che la fprintf scrive nel file invece che sul video.<br />
Il programma richiedera’ all’utente di immettere per ogni record i vari campi; quando viene conclusa<br />
l’immissione dei dati richiedera’ un end-of-file.<br />
L’end-of-file per i diversi sistemi di computer e’ segnalato in lista (Sistema,Combinazione di tasti):<br />
Sistemi UNIX: &lt;return&gt;&lt;ctrl&gt;d<br />
PC IBM e compatibili: &lt;ctrl&gt;z<br />
Macintosh: &lt;ctrl&gt;d<br />
VAX(VMS): &lt;ctrl&gt;z</p>
<p>La riga di codice<br />
while (!feof(stdin))<br />
Usa la funzione feof per determinare se sia stato impostato EOF per il file al quale punta stdin.<br />
EOF indichera’ al programma che non ci sono piu’ dati da elaborare.<br />
Il nostro programma non mostra come i dati dei record appaiono realmente all’interno del file. Per fare<br />
cio’ e verificare quindi la correttezza dei dati creati necessita un programma che leggera’ il file e ne<br />
visualizza il contenuto.<br />
Funzioni di lettura e scrittura<br />
Si distinguono in due categorie lettura e scrittura per carattere e lettura e scrittura per linee (stringhe).<br />
Fra le prime consideriamo la funzione fputc e la funzione fgetc.<br />
La funzione fputc ha il seguente prototipo:<br />
int fputc (int c , FILE *fpunt);<br />
questa funzione preleva un carattere c e lo stampa(scrive) nel file fpunt,(file puntato da fpunt) nella<br />
posizione del cursore; naturalmente il file deve essere stato precedentemente aperto con la funzione<br />
fopen( ), ed fpunt e’ il puntatore restituito da quest’ultima funzione.<br />
Il carattere c viene convertito in un unsigned char nella fputc.<br />
Restituisce il carattere letto (il codice) oppure EOF (se la stampa e’ andata male)<br />
La funzione fgetc ha il seguente prototipo:<br />
int fgetc(FILE *fpunt);<br />
la funzione restituisce (convertito in intero) il carattere letto dal file fpunt “file precedentemente aperto<br />
con la fopen()”;<br />
il cursore avanza di un dato (il prossimo da leggere); in caso vi sia errore viene restituito EOF.<br />
Nella lettura e scrittura per linee consideriamo la funzione fgets ed fputs ; con la fgets si legge al piu’<br />
una intera linea da un file passato per argomento “file precedentemente aperto tramite la funzione<br />
fopen()”.<br />
Il prototipo della funzione e’:<br />
char *fgets (char *strin, int n, FILE *fpunt);<br />
con questa funzione viene letto, dal file fpunt, una sequenza di caratteri, fermandosi al newline (oppure<br />
fermandosi ad n caratteri letti od all’EOF) e memorizza i caratteri letti nell’array strin; la fgets<br />
restituisce l’array letto oppure NULL se ha incontrato EOF.<br />
L’eventuale EOL (‘\n’) letto verra’ incluso nella stringa risultante.<br />
Con il parametro n si specifica il numero massimo di caratteri da leggere; se la linea del file contiene<br />
un numero di caratteri maggiore di n i caratteri in eccesso non verranno letti.<br />
La funzione fputs ha il seguente prototipo:<br />
int fputs(const char *strin, FILE *fpunt);<br />
e stampa nel file fpunt(precedentemente aperto tramite la fopen(..) ) i caratteri contenuti nella stringa<br />
strin; se la stampa e’ andata a buon fine restituisce il valore 0 , altrimenti un numero diverso da zero.<br />
Esempio<br />
Nel seguente programma la funzione fputs() scrive nel file prova delle stringhe lette dalla tastiera,<br />
tramite la funzione gets(), e passategli come parametro.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;stdio.h&quot;</span>
 <span style="color: #339933;">#include &quot;stdlib.h&quot;</span>
 <span style="color: #339933;">#include &quot;string.h&quot;</span>
 <span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span><span style="color: #993333;">char</span> strin<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">81</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 FILE <span style="color: #339933;">*</span>fpunt<span style="color: #339933;">;</span>
 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>fpunt<span style="color: #339933;">=</span>fopen<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;prova&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;w&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span>NULL<span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Errore nella lettura del file<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">do</span>
 <span style="color: #009900;">&#123;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;inserite una stringa e premere INVIO per uscire:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 gets<span style="color: #009900;">&#40;</span>strin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 strcat<span style="color: #009900;">&#40;</span>strin<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/*aggiunta di un newline*/</span>
 fputs<span style="color: #009900;">&#40;</span>strin<span style="color: #339933;">,</span>fpunt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>strin <span style="color: #339933;">!=</span><span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Per uscire dal programma introducete una stringa vuota.<br />
Notare che la funzione gets non memorizza il carattere di newline, per cui ne aggiungiamo uno alla<br />
stringa letta da input, attraverso la funzione strcat, prima che tale stringa venga scritta nel file fpunt.<br />
La funzione rewind()<br />
La rewind() ripristina l’indicatore di posizione del file specificato ‘cursore’. Ossia il file e’ come se<br />
venisse ravvolto con la rewind().<br />
Il prototipo di tale funzione e’:<br />
void rewind (FILE *fpunt);<br />
fpunt e’ un puntatore ad un file.<br />
Le funzioni di lettura e scrittura formattata<br />
Sono la fprintf() e la fscanf() analoghe alla printf e scanf, soltanto che accettano un argomento in piu’,<br />
cioe’ il file dove scrivere o da cui leggere.<br />
I prototipi sono rispettivamente:<br />
int fprintf(FILE *fpunt, const char *stringa_formato, &lt;argomenti&gt;);<br />
la quale stampa nel file fpunt secondo le specifiche della stringa formato;<br />
e la<br />
int fscanf (FILE *fpunt, const char * stringa_formato, &lt;argomenti&gt;);<br />
la fscanf legge dal file fpunt i dati specificati nella stringa_formato.<br />
Cenni sui file ad accesso casuale<br />
I record di un file creati con l’output formattato della funzione fprintf non avranno necessariamente la<br />
stessa lunghezza. Ogni record di un file ad accesso casuale puo’ essere acceduto direttamente avendo di<br />
norma la stessa lunghezza. Dal momento che in un file ad accesso casuale ogni record ha lunghezza<br />
fissa, la sua posizione all’interno del file puo’ essere calcolata con una funzione della chiave del record.<br />
Le funzioni di lettura e scrittura per blocchi<br />
Attraverso le funzioni fread() ed fwrite() si possono leggere e scrivere rispettivamente interi blocchi di<br />
byte da un file.<br />
I loro prototipi sono:</p>
<p>size_t fread(void *buffer, size_t num_byte, size_t contatore, FILE *fpunt);<br />
size_t fwrite(void *buffer, size_t num_byte, size_t contatore, FILE *fpunt);</p>
<p>nella fread buffer e’ l’indirizzo di una locazione di memoria destinata a ricevere i dati letti dal file<br />
fpunt. Con essa si leggono dal file fpunt un blocco di contatore dati con ciascun dato avente dimensione<br />
num_byte. La fread restituisce il numero di elementi letti con successo.<br />
Le funzioni fread ed fwrite sono in grado di leggere e scrivere su disco interi vettori di dati.<br />
Il terzo argomento delle funzioni e’ il numero degli elementi del vettore che dovranno essere letti/scritti<br />
dal/sul disco.<br />
Vediamo adesso un programma che se il file viene aperto in modo binario scrive un double un int e un<br />
long in un file di nome fle_test e li rilegge:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
 <span style="color: #339933;">#include&lt;stdlib.h&gt;</span>
 <span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 FILE <span style="color: #339933;">*</span>fpunt<span style="color: #339933;">;</span>
 <span style="color: #993333;">double</span> d<span style="color: #339933;">=</span><span style="color:#800080;">11.23</span><span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">101</span><span style="color: #339933;">;</span>
 <span style="color: #993333;">long</span> l<span style="color: #339933;">=</span><span style="color: #0000dd;">113023L</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>fpunt<span style="color: #339933;">=</span>fopen<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;file_test&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;wb+&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span>NULL<span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;errore di apertura del file<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 fwrite<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>d<span style="color: #339933;">,</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>fpunt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 fwrite<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>i<span style="color: #339933;">,</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>fpunt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 fwrite<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>l<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>fpunt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 rewind<span style="color: #009900;">&#40;</span>fpunt<span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/*riposiziona il puntatore all'inizio del file*/</span>
 fread<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>d<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>fpunt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 fread<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>i<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>fpunt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 fread<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>l<span style="color: #339933;">,</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>fpunt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%f %d %ld&quot;</span><span style="color: #339933;">,</span>d<span style="color: #339933;">,</span>i<span style="color: #339933;">,</span>l<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 fclose<span style="color: #009900;">&#40;</span>fpunt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Il linguaggio C consente le operazioni di lettura e scrittura ad accesso casuale usando la funzione<br />
fseek(), che ha il compito di posizionare il cursore del file.<br />
Il prototipo della fseek() e’:<br />
int fseek(FILE *fpunt, long num_byte, int origine);<br />
fpunt e’ il puntatore al file come viene restituito dalla funzione fopen();<br />
num_byte e’ il numero di byte di distanza tra l’origine e la nuova posizione (detto offset o<br />
scostamento); notare che in questo caso occorre usare l&#8217;operatore sizeof per accedere all&#8217;elemento<br />
desiderato; mentre origine e’ una delle seguenti macro definite da stdio.h :</p>
<ul>
<li>SEEK_SET: Inizio del file</li>
<li>SEEK_CUR: Posizione corrente</li>
<li>SEEK_END: Fine del file</li>
</ul>
<p>Per leggere l&#8217;ennesimo elemento del file fp, che supponiamo contenga elementi di tipo tipo_elementi,<br />
useremo:</p>
<p><em>fseek(fp,(n-1)*sizeof(tipo_elementi),SEEK_SET);<br />
fread(&amp;buffer,sizeof(tipo_elementi),1,fp);</em></p>
<h2>Esempio di programma per file binari</h2>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include&lt;stdio.h&gt;</span>
 <span style="color: #339933;">#define N 15</span>
 <span style="color: #993333;">char</span> nome_file<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;file_int.dat&quot;</span><span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> vector<span style="color: #009900;">&#91;</span>N<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #993333;">void</span> inserisci_in_array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #993333;">void</span> crea_file<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #993333;">void</span> apri_file<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 <span style="color: #993333;">char</span> car<span style="color: #339933;">;</span>
 inserisci_in_array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 crea_file<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 apri_file<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>%c&quot;</span><span style="color: #339933;">,&amp;</span>car<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #993333;">void</span> inserisci_in_array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>inserite gli %d elementi interi dell'array<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>N<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>N<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span><span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d) &quot;</span><span style="color: #339933;">,</span>i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,&amp;</span>vector<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #993333;">void</span> crea_file<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 FILE <span style="color: #339933;">*</span>fp<span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>fp<span style="color: #339933;">=</span>fopen<span style="color: #009900;">&#40;</span>nome_file<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;wb&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
 fwrite<span style="color: #009900;">&#40;</span>vector<span style="color: #339933;">,</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>N<span style="color: #339933;">,</span>fp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 fclose<span style="color: #009900;">&#40;</span>fp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">else</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;errore nell'apertura in scrittara del file %s &quot;</span><span style="color: #339933;">,</span>nome_file<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #993333;">void</span> apri_file<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 FILE <span style="color: #339933;">*</span>fp<span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>fp<span style="color: #339933;">=</span>fopen<span style="color: #009900;">&#40;</span>nome_file<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;rb&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span>NULL<span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>fread<span style="color: #009900;">&#40;</span>vector<span style="color: #339933;">,</span>N<span style="color: #339933;">*</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>fp<span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span><span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>N<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
 <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; %d) %d &quot;</span><span style="color: #339933;">,</span>i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>vector<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 fclose<span style="color: #009900;">&#40;</span>fp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">else</span> <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;errore nell'apertura del file %s in lettura&quot;</span><span style="color: #339933;">,</span>nome_file<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/07/gestione-dei-file-nel-linguaggio-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
