<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Hard Link on Melabit</title>
    <link>https://static.233.196.69.159.clients.your-server.de/it/tags/hard-link/</link>
    <description>Recent content in Hard Link on Melabit</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Thu, 22 May 2014 06:00:00 +0000</lastBuildDate>
    <atom:link href="https://static.233.196.69.159.clients.your-server.de/it/tags/hard-link/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Sandboxing in iOS: usciamo dal recinto</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/05/22/sandboxing-in-ios-usciamo-dal-recinto/</link>
      <pubDate>Thu, 22 May 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/05/22/sandboxing-in-ios-usciamo-dal-recinto/</guid>
      <description>&lt;img src=&#34;http://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Sandpit.jpg/800px-Sandpit.jpg&#34; class=&#34;alignnone&#34; /&gt;&#xA;&lt;p&gt;Esiste una soluzione &lt;em&gt;semplice&lt;/em&gt; al &lt;a href=&#34;https://melabit.wordpress.com/2014/05/16/sandboxing-in-ios-un-recinto-troppo-stretto/&#34;&gt;problema del &lt;em&gt;sandboxing&lt;/em&gt; delle applicazioni per iOS&lt;/a&gt;, che non impatti sulla sicurezza del sistema ma che allo stesso tempo permetta a più applicazioni di aprire e modificare un dato documento, evitando inutili duplicazioni e, quel che è peggio, di dover tenere traccia delle modifiche effettuate da ciascuna applicazione?&lt;/p&gt;&#xA;&lt;p&gt;Soluzioni fattibili &amp;ndash; più o meno semplici e più o meno affidabili o sicure &amp;ndash; ce ne sono bizzeffe. Qui ne propongo una anch&amp;rsquo;io, che ha la caratteristica di sfruttare solo gli strumenti già esistenti in Unix e nei sistemi operativi derivati, fra cui anche iOS.&lt;/p&gt;&#xA;&lt;p&gt;Sia chiaro che non voglio sostituirmi agli ingegneri e ai programmatori della Apple, che conoscono molto meglio di me il sistema su cui lavorano. Quello che voglio è solo dare un contributo di principio e di dimostrarne la fattibilità pratica.&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;eventuale (eventuale, non dimentichiamolo!) implementazione finale sarà di certo molto più brillante ed efficiente di questa.&lt;/p&gt;&#xA;&lt;p&gt;Per evitare ambiguità userò nel seguito un linguaggio standard, evitando le definizioni tipiche del mondo Apple: &lt;em&gt;directory&lt;/em&gt; al posto di &lt;em&gt;cartella&lt;/em&gt;, &lt;em&gt;file&lt;/em&gt; invece di &lt;em&gt;documento&lt;/em&gt;, &lt;em&gt;soft-link&lt;/em&gt; invece che &lt;em&gt;link simbolico&lt;/em&gt;, e ogni volta che mi riferirò a &lt;em&gt;Unix&lt;/em&gt; intenderò in effetti tutti sistemi operativi che derivano dalla base di Unix, come Linux, i vari BSD e ovviamente OS X e iOS.&lt;/p&gt;&#xA;&lt;h4 id=&#34;tutto-è-un-file&#34;&gt;Tutto è un file&lt;/h4&gt;&#xA;&lt;p&gt;Prima di proseguire il discorso bisogna ricordare alcuni concetti fondamentali sui file in Unix.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://en.wikipedia.org/wiki/Everything_is_a_file&#34;&gt;&lt;em&gt;Tutto è un file in Unix&lt;/em&gt;&lt;/a&gt;. Questo è uno dei primi mantra che si imparano quando ci si accosta a questo sistema operativo. Una directory è un file, persino la comunicazione fra i vari processi o con i dispositivi hardware avviene tramite file.&lt;/p&gt;&#xA;&lt;p&gt;Ma com&amp;rsquo;è fatto un file in Unix?&lt;/p&gt;&#xA;&lt;p&gt;Un file è composto da tre parti diverse e ben distinte fra loro: il &lt;em&gt;nome&lt;/em&gt; del file, il &lt;em&gt;contenuto&lt;/em&gt; del file e i &lt;em&gt;metadati&lt;/em&gt;, una serie di informazioni accessorie sul file che esamineremo meglio dopo.&lt;/p&gt;&#xA;&lt;img src=&#34;http://melabit.files.wordpress.com/2014/05/sandbox_2-1.png&#34; alt=&#34;File in Unix&#34; width=&#34;496&#34; height=&#34;379&#34; class=&#34;aligncenter size-full wp-image-946&#34; /&gt;&#xA;&lt;p&gt;Il contenuto del file è salvato in uno o più settori del disco rigido, i metadati sono memorizzati negli &lt;em&gt;inode&lt;/em&gt;, delle strutture dati create al momento della formattazione del disco rigido e numerate univocamente, e infine il nome del file si trova nella directory (anch&amp;rsquo;essa un file!) che lo contiene, in una tabella che associa ad ogni nome di file della directory il numero dell&amp;rsquo;inode in cui sono salvati i metadati corrispondenti.&lt;/p&gt;&#xA;&lt;img src=&#34;http://melabit.files.wordpress.com/2014/05/sandbox_2-2.png&#34; alt=&#34;Struttura di una directory&#34; width=&#34;588&#34; height=&#34;400&#34; class=&#34;aligncenter size-full wp-image-947&#34; /&gt;&#xA;&lt;p&gt;Ogni inode è una struttura dati (una specie di tabella un po&amp;rsquo; più complicata) contenente, fra l&amp;rsquo;altro, la dimensione del file, i permessi di accesso e di modifica, la data e l&amp;rsquo;ora in cui in cui il file è stato creato, modificato o semplicemente letto, i puntatori ai settori fisici del disco rigido in cui è salvato il contenuto vero e proprio del file ed infine, quello che ci interessa di più, un numero intero che serve a contare il numero di &lt;em&gt;copie&lt;/em&gt; (virtuali) del file stesso create tramite i cosiddetti &lt;em&gt;hard-link&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;img src=&#34;http://melabit.files.wordpress.com/2014/05/sandbox_2-3.png?w=605&#34; alt=&#34;Struttura di un inode&#34; width=&#34;605&#34; height=&#34;306&#34; class=&#34;aligncenter size-large wp-image-948&#34; /&gt;&#xA;&lt;p&gt;Se a questo punto non vi gira già la testa potete continuare  a leggere&amp;hellip;&lt;/p&gt;&#xA;&lt;h4 id=&#34;hard-link-e-soft-link&#34;&gt;Hard-link e soft-link&lt;/h4&gt;&#xA;&lt;p&gt;In Unix è possibile riferirsi in modo indiretto ad un file mediante due diversi tipi di file: gli &lt;em&gt;hard-link&lt;/em&gt; e i &lt;em&gt;soft-link&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Dei soft-link &lt;a href=&#34;http://melabit.wordpress.com/2014/03/21/come-mettere-un-piolo-quadrato-in-un-buco-rotondo/&#34;&gt;ho già scritto in questo blog&lt;/a&gt;. Aggiungo che il soft-link crea un riferimento al &lt;em&gt;nome del file&lt;/em&gt;, e si usa principalmente per dare un nome diverso ad un file.&lt;/p&gt;&#xA;&lt;p&gt;Un hard-link crea invece un riferimento al &lt;em&gt;numero dell&amp;rsquo;inode&lt;/em&gt; che contiene i metadati del file di partenza. Il file creato tramite un hard-link appare quindi a tutti gli effetti una copia del file originale, anche se non è esattamente così. Quando si copia un file, il nuovo file ha nome ed inode diverso ed anche il contenuto del file originale viene copiato in un&amp;rsquo;altra area del disco rigido. Creando un hard-link, il nuovo file avrà solo un nome diverso ma &lt;em&gt;continuerà a riferirsi allo stesso inode&lt;/em&gt;, e quindi allo stesso contenuto, sul disco rigido.&lt;/p&gt;&#xA;&lt;img src=&#34;http://melabit.files.wordpress.com/2014/05/sandbox_2-4.png?w=605&#34; alt=&#34;Hard-link e soft-link&#34; width=&#34;605&#34; height=&#34;368&#34; class=&#34;aligncenter size-large wp-image-949&#34; /&gt;&#xA;&lt;p&gt;Qualunque operazione effettuata sull&amp;rsquo;hard-link &amp;ndash; modifica del contenuto del file, dei permessi, dell&amp;rsquo;ora di accesso al file &amp;ndash; appare come se fosse effettuata  anche sul file originale e su tutti i suoi hard-link: un hard-link è a tutti gli effetti &lt;em&gt;lo stesso file&lt;/em&gt;, ma con un nome diverso.&lt;/p&gt;&#xA;&lt;p&gt;A differenza del soft-link, però, che perde il riferimento al file originale e non serve più a nulla se quest&amp;rsquo;ultimo viene cancellato dal disco rigido, un hard-link continua ad essere valido anche se si cancella il file a cui fa riferimento.&lt;/p&gt;&#xA;&lt;p&gt;Un hard-link ad un file viene creato con il comando,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ ln file hfile&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;dove &lt;code&gt;file&lt;/code&gt; è il file originale e &lt;code&gt;hfile&lt;/code&gt; è l&amp;rsquo;hard-link (ovviamente i due file possono anche essere in directory diverse). Per creare il soft-link &lt;code&gt;sfile&lt;/code&gt; basta aggiungere l&amp;rsquo;opzione &lt;code&gt;-s&lt;/code&gt; al comando precedente.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ ln -s file sfile&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Ogni volta che si crea un nuovo file, il contatore delle copie del file contenuto nell&amp;rsquo;inode viene settato ad 1. Aggiungendo un hard-link a quel file, il sistema operativo incrementa di 1 il contatore, cancellando l&amp;rsquo;hard-link il contatore viene decrementato di 1. In effetti, tramite il contatore, il sistema operativo può sapere quanti hard-link sono presenti sul disco rigido oltre al file originale.&lt;/p&gt;&#xA;&lt;p&gt;Arrivati a questo punto, chi vuole può saltare la sezione seguente e andare direttamente &lt;a href=&#34;https://static.233.196.69.159.clients.your-server.de/it/2014/05/22/sandboxing-in-ios-usciamo-dal-recinto/#usciamo&#34;&gt;all&amp;rsquo;ultima parte del post&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;un-po-di-pratica&#34;&gt;Un po&amp;rsquo; di pratica&amp;hellip;&lt;/h4&gt;&#xA;&lt;p&gt;Usiamo ora il Terminale di OS X per mettere in pratica quanto abbiamo appena visto.&lt;/p&gt;&#xA;&lt;p&gt;Il comando &lt;code&gt;touch&lt;/code&gt; crea un nuovo file, a cui aggiungiamo una riga di testo qualunque con &lt;code&gt;echo&lt;/code&gt; (un metodo quasi da hacker, si potrebbe benissimo farlo con un editor di testo).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ touch file.txt&#xA;$ echo &amp;quot;Ho appena creato un file di testo.&amp;quot; &amp;gt;&amp;gt; file.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Tramite &lt;code&gt;ls -l&lt;/code&gt; mostriamo il file appena creato e una parte dei metadati associati.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ ls -l&#xA;-rw-r--r--  1 maggi  staff  35 May 19T22:53:00 file.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Ci interessano qui due numeri in particolare. Quello contenuto nella seconda colonna è il contatore delle copie del file e vale &lt;code&gt;1&lt;/code&gt; poiché il file è stato appena creato. Il numero nella quinta colonna, &lt;code&gt;35&lt;/code&gt;, è invece la dimensione in byte del file, uguale al numero di lettere che compongono il testo aggiunto con &lt;code&gt;echo&lt;/code&gt; più il carattere (invisibile) di a capo.&lt;/p&gt;&#xA;&lt;p&gt;Creiamo ora un hard-link e un soft-link che puntano entrambi al file di testo &lt;code&gt;file.txt&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ ln file.txt hfile.txt&#xA;$ ln -s file.txt sfile.doc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Eseguendo di nuovo &lt;code&gt;ls -l&lt;/code&gt;,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ ls -l&#xA;-rw-r--r--  2 maggi  staff  35 May 19T22:53:00 file.txt&#xA;-rw-r--r--  2 maggi  staff  35 May 19T22:53:00 hfile.txt&#xA;lrwxr-xr-x  1 maggi  staff   8 May 19T22:54:00 sfile.doc -&amp;gt; file.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;si notano alcune cose fondamentali: (1) l&amp;rsquo;hard-link appare come un file del tutto identico al file originale, dimensioni, permessi, data di creazione (o di accesso), (2) il soft-link ha invece date, dimensioni e permessi differenti, (3) ed è anche mostrato in modo diverso nel Terminale, con una freccia che punta la file originale e con una &lt;code&gt;l&lt;/code&gt; al posto del &lt;code&gt;-&lt;/code&gt; nel primo carattere della riga, (4) avendo creato un hard-link il contatore delle copie del file contenuto nell&amp;rsquo;inode viene incrementato di 1 e, poiché i due file si riferiscono allo stesso inode (e quindi allo stesso contatore), il valore del contatore è uguale per &lt;code&gt;file.txt&lt;/code&gt; e &lt;code&gt;hfile.txt&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;opzione &lt;code&gt;-i&lt;/code&gt; del comando &lt;code&gt;ls&lt;/code&gt; permette di stampare il numero dell&amp;rsquo;inode associato ad ogni file. Nel nostro esempio, si vede chiaramente che l&amp;rsquo;inode del file originale e quello dell&amp;rsquo;hard-link associato sono uguali.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ ls -li&#xA;219115720 -rw-r--r--  2 maggi  staff  35 May 19T22:53:00 file.txt&#xA;219115720 -rw-r--r--  2 maggi  staff  35 May 19T22:53:00 hfile.txt&#xA;219115795 lrwxr-xr-x  1 maggi  staff   8 May 19T22:54:00 sfile.doc -&amp;gt; file.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Creando un hard-link si incrementa il contatore del numero di file contenuto nell&amp;rsquo;inode,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ ln file.txt h2file.dat&#xA;$&#xA;$ ls -li&#xA;219115720 -rw-r--r--  3 maggi  staff  35 May 19T22:53:00 file.txt&#xA;219115720 -rw-r--r--  3 maggi  staff  35 May 19T22:53:00 h2file.dat&#xA;219115720 -rw-r--r--  3 maggi  staff  35 May 19T22:53:00 hfile.txt&#xA;219115795 lrwxr-xr-x  1 maggi  staff   8 May 19T22:54:00 sfile.doc -&amp;gt; file.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;mentre se si cancella un hard-link il contatore viene decrementato di 1.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ rm hfile.txt&#xA;$&#xA;$ ls -li&#xA;219115720 -rw-r--r--  2 maggi  staff  35 May 19T22:53:00 file.txt&#xA;219115720 -rw-r--r--  2 maggi  staff  35 May 19T22:53:00 h2file.dat&#xA;219115795 lrwxr-xr-x  1 maggi  staff   8 May 19T22:54:00 sfile.doc -&amp;gt; file.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;usciamo&#34;&gt;Usciamo dal recinto&lt;/h4&gt;&#xA;&lt;p&gt;Per permettere a più applicazioni iOS di accedere alla stesso file, evitando allo stesso tempo la moltiplicazione dei file in diverso stato di &amp;ldquo;lavorazione&amp;rdquo;, serve un meccanismo che permetta di inserire tutti i documenti in un&amp;rsquo;area comune, riuscendo però a fare in modo che ciascuna applicazione continui ad accedere solo ai documenti che è autorizzata a gestire, cioè quelli contenuti nel suo &lt;em&gt;sandbox&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ricordo che il &lt;em&gt;sandbox&lt;/em&gt; è un meccanismo che limita l&amp;rsquo;accesso di una applicazione ai file, alle preferenze, alle risorse di rete, all&amp;rsquo;hardware e così via, incapsulando ciascuna applicazione con i suoi documenti in una directory protetta.&lt;/p&gt;&#xA;&lt;p&gt;Proprio gli hard-link possono essere sfruttati per implementare questo meccanismo.&lt;/p&gt;&#xA;&lt;p&gt;In iOS (ma anche in OS X) le applicazioni ci appaiono come delle semplici icone. In realtà ogni applicazione è costituita da una directory che contiene al suo interno &lt;em&gt;tutto&lt;/em&gt; quello che le serve per funzionare: l&amp;rsquo;eseguibile, le librerie, i file di supporto e di configurazione, le immagini e le icone e i documenti creati con l’applicazione stessa.&lt;/p&gt;&#xA;&lt;p&gt;Immaginiamo ora di avere due applicazioni installate nel nostro dispositivo iOS. Se &lt;em&gt;guardiamo&lt;/em&gt; al loro interno, osserveremo una struttura delle directory simile a questa.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ tree&#xA;.&#xA;├── appA&#xA;│   ├── appA.app&#xA;│   ├── documents&#xA;│   ├── library&#xA;│   └── tmp&#xA;└── appB&#xA;&#x9;├── appB.app&#xA;&#x9;├── documents&#xA;&#x9;├── library&#xA;&#x9;└── tmp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;La directory con estensione &lt;code&gt;.app&lt;/code&gt; contiene il file eseguibile dell&amp;rsquo;applicazione, le altre non necessitano di spiegazioni.&#xA;Si noti che il comando &lt;code&gt;tree&lt;/code&gt; usato per mostrare la struttura delle directory delle due applicazioni non esiste di default in OS X, ma può essere &lt;a href=&#34;http://melabit.wordpress.com/2014/04/29/homebrew-software-per-il-mac-fatto-in-casa/&#34;&gt;installato sul Mac tramite Homebrew&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Aggiungiamo qualche file in ciascuna delle due applicazioni.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ tree&#xA;.&#xA;├── appA&#xA;│   ├── appA.app&#xA;│   ├── documents&#xA;│   │   ├── file-AB.txt&#xA;│   │   └── file_A1.pdf&#xA;│   ├── library&#xA;│   └── tmp&#xA;└── appB&#xA;&#x9;├── appB.app&#xA;&#x9;├── documents&#xA;&#x9;│   ├── file-AB.txt&#xA;&#x9;│   ├── file_B1.pdf&#xA;&#x9;│   └── file_B2.txt&#xA;&#x9;├── library&#xA;&#x9;└── tmp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Come abbiamo già visto, ognuna delle due applicazioni può gestire solo i documenti contenuti al suo interno. Le due applicazioni possono al massimo scambiarsi i file contenuti nella directory &lt;code&gt;documents&lt;/code&gt; di ciascuna, copiandoli integralmente da una applicazione all&amp;rsquo;altra. Nell&amp;rsquo;esempio precedente il file comune è &lt;code&gt;file-AB.txt&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Una volta completata la copia, le modifiche effettuata da &lt;code&gt;appA&lt;/code&gt; su &lt;code&gt;file-AB.txt&lt;/code&gt; sono del tutto indipendenti da quelle effettuate da &lt;code&gt;appB&lt;/code&gt; sul file omonimo contenuto nel suo sandbox. L&amp;rsquo;unico modo per mantenere il file sincronizzato fra le due applicazioni è quello di copiarlo dopo ogni modifica dal sandbox di una applicazione a quello dell&amp;rsquo;altra. Una cosa poco pratica e facilmente soggetta ad errori.&lt;/p&gt;&#xA;&lt;p&gt;Immaginiamo invece di creare una directory &lt;code&gt;pool&lt;/code&gt;, esterna alle due applicazioni, che agisca come spazio comune per tutti i documenti.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ tree&#xA;.&#xA;├── appA&#xA;│   ├── appA.app&#xA;│   ├── documents&#xA;│   ├── library&#xA;│   └── tmp&#xA;├── appB&#xA;│   ├── appB.app&#xA;│   ├── documents&#xA;│   ├── library&#xA;│   └── tmp&#xA;└── pool&#xA;&#x9;├── file-AB.txt&#xA;&#x9;├── file_A1.pdf&#xA;&#x9;├── file_B1.pdf&#xA;&#x9;└── file_B2.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Ma le applicazioni presuppongono che i documenti siano all&amp;rsquo;interno del loro sandbox. È possibile fare in modo che le applicazioni riescano comunque ad accedere ai file in &lt;code&gt;pool&lt;/code&gt;?&lt;/p&gt;&#xA;&lt;p&gt;Facile: basta creare degli hard-link che dalla directory &lt;code&gt;documents&lt;/code&gt; di ogni applicazione puntino ai file contenuti in &lt;code&gt;pool&lt;/code&gt;. Ricreando tramite hard-link il contenuto originale delle directory &lt;code&gt;documents&lt;/code&gt; delle due applicazioni si ottiene,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ tree&#xA;.&#xA;├── appA&#xA;│   ├── appA.app&#xA;│   ├── documents&#xA;│   │   ├── hfile-AB.txt&#xA;│   │   └── hfile_A1.pdf&#xA;│   ├── library&#xA;│   └── tmp&#xA;├── appB&#xA;│   ├── appB.app&#xA;│   ├── documents&#xA;│   │   ├── hfile-AB.txt&#xA;│   │   ├── hfile_B1.pdf&#xA;│   │   └── hfile_B2.txt&#xA;│   ├── library&#xA;│   └── tmp&#xA;└── pool&#xA;&#x9;├── file-AB.txt&#xA;&#x9;├── file_A1.pdf&#xA;&#x9;├── file_B1.pdf&#xA;&#x9;└── file_B2.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;dove, per chiarezza, gli hard-link sono indicati dal prefisso &lt;code&gt;h&lt;/code&gt; aggiunto al nome del file.&lt;/p&gt;&#xA;&lt;p&gt;Il vantaggio principale di questo meccanismo è che se una delle due applicazioni modifica il file &lt;code&gt;hfile-AB.txt&lt;/code&gt; contenuto nel suo sandbox (quindi all&amp;rsquo;interno della &lt;em&gt;sua&lt;/em&gt; directory &lt;code&gt;documents&lt;/code&gt;), tutte le modifiche fatte dall&amp;rsquo;applicazione valgono anche per il file originale e per l&amp;rsquo;hard-link corrispondente contenuto nel sandbox dell&amp;rsquo;altra applicazione.&lt;/p&gt;&#xA;&lt;p&gt;Ovviamente quanto detto finora è facilmente generalizzabile a un numero qualunque di applicazioni e di file.&lt;/p&gt;&#xA;&lt;p&gt;Un altro vantaggio, che dovrebbe essere evidente da quanto detto in questo lunghissimo articolo, è che un hard-link &lt;em&gt;non occupa altro spazio&lt;/em&gt; sul disco rispetto a quello occupato dal file originale. Si evita quindi di sprecare inutilmente spazio sul disco dell&amp;rsquo;iPhone e dell&amp;rsquo;iPad a causa della duplicazione dei file trasferiti da una applicazione all&amp;rsquo;altra. E si sa bene che lo spazio su &lt;em&gt;qualunque&lt;/em&gt; computer non basta &lt;em&gt;mai&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ma come fa l&amp;rsquo;applicazione a inserire un nuovo documento in &lt;code&gt;pool&lt;/code&gt; e a creare l&amp;rsquo;hard-link corrispondente nella sua directory &lt;code&gt;documents&lt;/code&gt;? La risposta è semplice: non serve che lo faccia l&amp;rsquo;applicazione, il meccanismo immaginato qui può essere gestito dal solo sistema operativo. In altre parole, il meccanismo può essere implementato a livello del sistema operativo in modo del tutto trasparente alle applicazioni, che quindi non hanno bisogno essere modificate per funzionare correttamente.&lt;/p&gt;&#xA;&lt;p&gt;Quando l&amp;rsquo;applicazione &lt;code&gt;appA&lt;/code&gt; apre per la prima volta &lt;code&gt;file-AB.txt&lt;/code&gt;, è il sistema operativo che si occupa di inserire il file in &lt;code&gt;pool&lt;/code&gt; e di creare l&amp;rsquo;hard-link nel sandbox di &lt;code&gt;appA&lt;/code&gt;. Il tutto è assolutamente trasparente ad &lt;code&gt;appA&lt;/code&gt;, che non si accorge nemmeno di quello che è successo dietro le quinte. Se poi a un certo punto ho bisogno di inviare &lt;code&gt;file-AB.txt&lt;/code&gt; da &lt;code&gt;appA&lt;/code&gt; ad &lt;code&gt;appB&lt;/code&gt;, posso limitarmi a cliccare come succede già oggi sull&amp;rsquo;icona apposita in &lt;code&gt;appA&lt;/code&gt;, e sarà poi il sistema operativo ad intercettare la richiesta di copia del file, creando in realtà un nuovo hard-link in &lt;code&gt;appB&lt;/code&gt; che punta anch&amp;rsquo;esso a &lt;code&gt;file-AB.txt&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Infine, se si disinstalla una applicazione, supponiamo &lt;code&gt;appB&lt;/code&gt;, anche i suoi documenti vengono cancellati dal disco, compreso &lt;code&gt;hfile-AB.txt&lt;/code&gt; condiviso con &lt;code&gt;appA&lt;/code&gt;. Ma il documento originale e l&amp;rsquo;hard-link in &lt;code&gt;appA&lt;/code&gt; rimangono sul disco e non vengono persi inavvertitamente. Solo se si cancella anche &lt;code&gt;appA&lt;/code&gt;, il sistema operativo attraverso il contatore nell&amp;rsquo;inode, si accorge che non ci sono più hard-link a &lt;code&gt;file-AB.txt&lt;/code&gt; contenuto in &lt;code&gt;pool&lt;/code&gt; e può decidere di cancellare anche il file originale, magari chiedendo conferma esplicita al proprietario o dopo aver effettuato un backup di sicurezza sul Mac.&lt;/p&gt;&#xA;&lt;p&gt;E anche la cancellazione dei file può essere affidata senza problemi al sistema operativo e non deve essere gestita dalla singola applicazione.&lt;/p&gt;&#xA;&lt;p&gt;Detto questo, aspettiamo pazientemente la WWDC 2014 per sapere che diavolerie inventerà &lt;em&gt;veramente&lt;/em&gt; la Apple, in questo settore. Ammesso, naturalmente, che ne inventi qualcuna.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
