PDA

Visualizza la versione completa : Lunghezza massima stringa su sitemi a 32 bit


violentoweb
20-04-2010, 10:19
Ragazzi, quanto è la lunghezza max che posso dare ad una cartella mper far si che me la legge un sistema operativo a 32 bit? Cioè quanto è il max di caratteri con cui posso chiamare una cartella per far si che il SO è in grado di leggerla?

MItaly
20-04-2010, 14:45
Premessa: qui i 32 bit/64 bit non c'entrano niente, ma ci sono diverse limitazioni a causa dei vari componenti che entrano in gioco nel gestire i file.
In primo luogo c'è il file system: NTFS limita la lunghezza di ciascuna componente di un percorso a 255 caratteri UTF-16; vale una limitazione analoga per FAT, ma lì ci sono complicazioni aggiuntive dovute al modo in cui è gestita la struttura di ciascuna directory.
Quindi, ci sono le limitazioni del kernel NT, che impone che un percorso UNC completo non possa essere più lungo di 32767 caratteri; all'atto pratico poi, per come sono gestiti i percorsi UNC internamente, questo limite si abbassa leggermente, per cui di solito si considera come limite di precauzione ~32000 caratteri.
Infine, ci sono le limitazioni delle API Win32, ossia quelle funzioni che la maggior parte delle applicazioni impiegano per interagire con Windows e, quindi, anche con i file. Se si impiegano percorsi "normali" (x:\percorso\nomefile.ext), ossia non-UNC, la limitazione qui è data dalla macro MAX_PATH, che da sempre si espande a 260 caratteri (ossia 256 caratteri di percorso "effettivo", un carattere per specificare il drive, due caratteri per il ':\' e il NUL finale che chiude la stringa); se invece l'applicazione impiega la versione Unicode delle API per la gestione dei file e usa i percorsi UNC, l'unica limitazione rimane quella detta prima del kernel, ossia di circa 32000 caratteri.
Il limite di MAX_PATH si può facilmente aggirare mappando percorsi particolarmente profondi come unità virtuali (ad esempio tramite il comando subst), mentre il limite interno di 32767 caratteri non si può aggirare in alcuna maniera.
Maggiori informazioni qui (http://msdn.microsoft.com/en-us/library/aa365247.aspx).

violentoweb
22-04-2010, 11:06
Originariamente inviato da MItaly
Premessa: qui i 32 bit/64 bit non c'entrano niente, ma ci sono diverse limitazioni a causa dei vari componenti che entrano in gioco nel gestire i file.
In primo luogo c'è il file system: NTFS limita la lunghezza di ciascuna componente di un percorso a 255 caratteri UTF-16; vale una limitazione analoga per FAT, ma lì ci sono complicazioni aggiuntive dovute al modo in cui è gestita la struttura di ciascuna directory.
Quindi, ci sono le limitazioni del kernel NT, che impone che un percorso UNC completo non possa essere più lungo di 32767 caratteri; all'atto pratico poi, per come sono gestiti i percorsi UNC internamente, questo limite si abbassa leggermente, per cui di solito si considera come limite di precauzione ~32000 caratteri.
Infine, ci sono le limitazioni delle API Win32, ossia quelle funzioni che la maggior parte delle applicazioni impiegano per interagire con Windows e, quindi, anche con i file. Se si impiegano percorsi "normali" (x:\percorso\nomefile.ext), ossia non-UNC, la limitazione qui è data dalla macro MAX_PATH, che da sempre si espande a 260 caratteri (ossia 256 caratteri di percorso "effettivo", un carattere per specificare il drive, due caratteri per il ':\' e il NUL finale che chiude la stringa); se invece l'applicazione impiega la versione Unicode delle API per la gestione dei file e usa i percorsi UNC, l'unica limitazione rimane quella detta prima del kernel, ossia di circa 32000 caratteri.
Il limite di MAX_PATH si può facilmente aggirare mappando percorsi particolarmente profondi come unità virtuali (ad esempio tramite il comando subst), mentre il limite interno di 32767 caratteri non si può aggirare in alcuna maniera.
Maggiori informazioni qui (http://msdn.microsoft.com/en-us/library/aa365247.aspx).


Praticamente io su win xp pro se scrivo il nome di una cartella con 255 caratteri va bene, mentre con 256 no giusto?

MItaly
22-04-2010, 21:00
In generale, la stragrande maggioranza delle applicazioni di fatto si limita a percorsi di lunghezza complessiva di 260 caratteri.

violentoweb
23-04-2010, 08:39
Originariamente inviato da MItaly
In generale, la stragrande maggioranza delle applicazioni di fatto si limita a percorsi di lunghezza complessiva di 260 caratteri.

scusa la domanda, ma su linux quanto è il limite all'incirca?

MItaly
23-04-2010, 10:55
Dipende dal kernel usato e da come sono state compilate le applicazioni; in genere comunque PATH_MAX è definito a 4096.

Loading