interop - GNU tar ././@LongLink "trick"到底是什么?

标签 interop gnu tar

I read gnu tar 和兼容 gnu 的 tar 实用程序使用 tar 条目类型“L”(76) 来指示存档中的下一个条目具有“长”名称。在这种情况下,条目类型为“L”的 header block 通常编码名称 ././@LongLink 。

我的问题是:下一个 block 的格式描述在哪里?

tar 存档的格式非常简单:它只是一系列 512 字节的 block 。在正常情况下,tar 存档中的每个文件都表示为一系列 block 。第一个 block 是 header block ,包含文件名、条目类型、修改时间和其他元数据。然后是原始文件数据,根据需要使用尽可能多的 512 字节 block 。然后是下一个条目。

如果文件名长于 header block 中分配的空间,gnu tar 显然会使用所谓的“././@LongLink 技巧”。我找不到它的准确描述。

当条目类型为“L”时,我如何知道“长”文件名有多长?长名称是否限制为 512 字节,换句话说,一个 block 中可以容纳的任何内容?

最重要的是:这个记录在哪里?

最佳答案

通过观察单个存档,我推测了 tar 存档中的“L”条目类型以及“././@LongLink”名称:

“L”条目出现在一系列 1 个或多个 512 字节 block 的 header 中,这些 block 仅保存名称超过 100 个字符的文件或目录的文件名。例如,如果文件名长度为 1200 个字符,则 header block 中的大小将为 1200,并且将有 3 个附加 block 包含文件名数据;最后一个 block 已部分填充。

该系列之后是另一个 header block ,采用传统形式 - 类型为“0”(常规文件)或“5”(目录)的 header ,后跟带有条目数据的适当数量的数据 block 。在本系列的标题中,名称将被截断为实际名称的前 100 个字符。

编辑
在这里查看我的实现: http://cheesoexamples.codeplex.com/SourceControl/changeset/view/99885#1868643

关于interop - GNU tar ././@LongLink "trick"到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078778/

相关文章:

c - argp 和 getopt 有什么区别?

ubuntu - gnu 并行 : Prefix output with hostname(s)

bash - 对于查看 .tgz 文件中的源文件有什么建议吗?

c# - Excel 后台进程未关闭

c++ - F#:使用自定义类型参数调用 native 函数

.net - 是否可以在 .Net Windows 表单中托管 Microsoft Access 表单?

c++ - 错误: ‘get_nprocs’ was not declared in this scope

c# - .NET2.0 C# 互操作 : How to call COM code from C#?

python - 提取给定目录中具有目录路径的所有文件

linux - 让 bash 将带有空格的变量作为单个文件名传递给 tar 时出现问题