Question

Je lis qu'un type d'entrée de goudron de « L '(76) est utilisé par GNU tar et utilitaires bitumineux compatible GNU pour indiquer que l'entrée suivante dans l'archive a un nom « long ». Dans ce cas, le bloc d'en-tête avec le type d'entrée de « L » code généralement le nom ././@LongLink.

Ma question est: où est le format du bloc suivant décrit?

Le format d'une archive tar est très simple: il est juste une série de blocs de 512 octets. Dans le cas normal, chaque fichier dans une archive tar est représentée comme une série de blocs. Le premier bloc est un bloc d'en-tête, contenant le nom du fichier, le type d'entrée, l'heure modifiée, et d'autres métadonnées. Ensuite, les données de fichier brut suit, en utilisant autant de blocs de 512 octets au besoin. Ensuite, l'entrée suivante.

Si le nom de fichier est plus long que s'inscrira dans l'espace alloué dans le bloc d'en-tête, le goudron gnu utilise apparemment ce qui est connu comme « l'affaire ././@LongLink ». Je ne peux pas trouver une description précise pour elle.

Lorsque le type d'entrée est « L », comment puis-je savoir combien de temps le nom de fichier « long » est? Le nom long limité à 512 octets, autrement dit, ce qui convient dans un bloc?

Plus important encore: où cela est documenté

Était-ce utile?

La solution

Juste par l'observation d'une archive unique est ici ce que je devinais sur le type d'entrée « L » dans les archives de goudron, et le nom « ././@LongLink »:

L'entrée « L » est présent dans un en-tête pour une série de 1 ou plusieurs blocs de 512 octets qui détiennent juste le nom de fichier pour un fichier ou un répertoire avec un nom de plus de 100 caractères. Par exemple, si le nom du fichier est de 1200 caractères de long, puis la taille dans le bloc d'en-tête sera 1200, et il y aura 3 blocs supplémentaires avec des données de nom de fichier; le dernier bloc est partiellement rempli.

Après cette série est un autre bloc d'en-tête, sous la forme traditionnelle - un en-tête de type « 0 » (fichier régulier) ou « 5 » (répertoire), suivi par le nombre approprié de blocs de données avec les données d'entrée. Dans l'en-tête pour cette série, le nom sera tronqué aux 100 premiers caractères du nom réel.

EDIT Voir ma mise en œuvre ici: http://cheesoexamples.codeplex.com/SourceControl/changeset/view/99885#1868643

Autres conseils

Notez que les informations sur tout cela se trouve dans le projet libtar:

http://www.feep.net/libtar/

L'en-tête est proposé libtar.h (par opposition à la tar.h POSIX) qui comprend clairement un nom de fichier long, et à long lien symbolique.

Obtenez les en-têtes + données pour les noms de fichiers longs / liens puis l'en-tête « vrai » « faux » (sauf pour le nom réel du fichier et un lien symbolique) après.

HEADER type 'L'
BLOCKS of data with the real long filename
HEADER type 'K'
BLOCKS of data with the real symbolic link
HEADER type '0' (or '5' for directory, etc.)
BLOCKS of data with the actual file contents

Bien sûr, sous MS-Windows, vous ne serez probablement pas gérer les liens symboliques, mais avec Win7 il est dit que les liens symboliques sous MS Windows travaillent (enfin).

Définition de libtar.h Pertinent:

/* GNU extensions for typeflag */
#define GNU_LONGNAME_TYPE   'L'
#define GNU_LONGLINK_TYPE   'K'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top