- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个学校项目,这意味着制作一个在unix系统中像tar一样工作的c程序。我有一些问题希望有人向我解释:
存档的维度。我(通过浏览互联网)了解到存档具有定义数量的 block ,每个 block 512 字节。因此 header 有 512 字节,然后是文件内容(如果只有一个要存档的文件),以 512 字节 block 的形式组织,然后再组织 2 个 512 字节 block 。
例如:假设我有一个 0 字节的 txt 文件要存档。这应该意味着要使用 512*3 字节的数量。为什么当我在 unix 中使用 tar 函数并单击属性时,它有 10.240 字节?我认为它添加了一些 0 (NULL) 字节,但我不知道在哪里、为什么以及有多少...
header 校验和。 据我所知,这应该是存档的大小。当我使用 hexdump -C 检查它时,它看起来像一个接近存档实际大小(单击属性时)的数字。例如,如果我存档 0 字节 txt 文件,则为 11200 或 11205 或类似的值。这个大小是八进制还是十进制?我打赌它是八进制的,因为您放入 header 中的所有信息都需要是八进制的。此时我的第二个问题是,在 10240 字节的原始大小基础上添加了哪些内容?
header 模式。假设我有一个 664 的文件,格式文件将为 0,那么我应该放入 header 0664。为什么,在正宗的存档上会打印 3开头多了 0 (000064) ?
最佳答案
tar 格式有多种版本,并且并非所有先前格式的扩展都始终相互兼容。所以总是会有一些猜测。例如,在非常古老的unix系统中,文件名不允许超过14个字节,因此文件名(包括路径)的空间是充足的;后来,文件名更长,必须扩展,但没有空间,所以文件名被分成两部分;甚至后来,gnu tar 引入了 @@LongLink 伪符号链接(symbolic link),这将使旧的 tar 至少将文件恢复为其原始名称。
1) Tar 最初是*T*ape *Ar*chiver。为了实现磁带的恒定吞吐量并避免过多地启动/停止磁带,需要一次写入多个 block 。默认为 20 个 512 字节的 block ,-b 选项用于设置 block 数。通常,该大小是由硬件预先定义的,并且使用错误的阻塞系数会导致生成的磁带无法使用。这就是为什么 tar 附加\0 填充的 block ,直到 tar 大小是 block 大小的倍数。
2) 文件大小为八进制,包含放入 tar 中的原始文件的真实大小。它与 tar 文件的大小无关。校验和是根据 header 字节的总和计算的,但随后也存储在 header 中。因此,存储校验和的行为会更改 header ,从而使校验和无效。这就是为什么您首先存储所有其他 header 字段,将校验和设置为空格,然后计算校验和,然后用您计算的值替换空格。
请注意,压缩文件的 header 是纯 ascii。这样,在过去,当 tar 文件(其组件是纯 ascii)损坏时,管理员只需使用编辑器打开 tar 文件并手动恢复组件即可。这就是为什么 tar 格式的设计者害怕\0 字节并使用空格来代替。
3) Tar 文件可以存储 block 设备、字符设备、目录等内容。 Unix 将这些文件模式存储在与权限标志相同的位置,并且头文件模式包含整个文件模式,包括文件类型位。这就是为什么该数字比纯权限长的原因。
关于archive - tar 格式的 header 和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21078479/
我目前正在尝试基于哈希表构建字典。逻辑是:有一个名为 HashTable 的结构,其中包含以下内容: HashFunc HashFunc; PrintFunc PrintEntry; CompareF
如果我有一个指向结构/对象的指针,并且该结构/对象包含另外两个指向其他对象的指针,并且我想删除“包含这两个指针的对象而不破坏它所持有的指针”——我该怎么做这样做吗? 指向对象 A 的指针(包含指向对象
像这样的代码 package main import "fmt" type Hello struct { ID int Raw string } type World []*Hell
我有一个采用以下格式的 CSV: Module, Topic, Sub-topic 它需要能够导入到具有以下格式的 MySQL 数据库中: CREATE TABLE `modules` ( `id
通常我使用类似的东西 copy((uint8_t*)&POD, (uint8_t*)(&POD + 1 ), back_inserter(rawData)); copy((uint8_t*)&PODV
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我有一个指向结构的指针数组,我正在尝试使用它们进行 while 循环。我对如何准确初始化它并不完全有信心,但我一直这样做: Entry *newEntry = malloc(sizeof(Entry)
我正在学习 C,我的问题可能很愚蠢,但我很困惑。在这样的函数中: int afunction(somevariables) { if (someconditions)
我现在正在做一项编程作业,我并没有真正完全掌握链接,因为我们还没有涉及它。但是我觉得我需要它来做我想做的事情,因为数组还不够 我创建了一个结构,如下 struct node { float coef;
给定以下代码片段: #include #include #define MAX_SIZE 15 typedef struct{ int touchdowns; int intercepti
struct contact list[3]; int checknullarray() { for(int x=0;x<10;x++) { if(strlen(con
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Empty “for” loop in Facebook ajax what does AJAX call
我刚刚在反射器中浏览了一个文件,并在结构构造函数中看到了这个: this = new Binder.SyntaxNodeOrToken(); 我以前从未见过该术语。有人能解释一下这个赋值在 C# 中的
我经常使用字符串常量,例如: DICT_KEY1 = 'DICT_KEY1' DICT_KEY2 = 'DICT_KEY2' ... 很多时候我不介意实际的文字是什么,只要它们是独一无二的并且对人类读
我是 C 的新手,我不明白为什么下面的代码不起作用: typedef struct{ uint8_t a; uint8_t* b; } test_struct; test_struct
您能否制作一个行为类似于内置类之一的结构,您可以在其中直接分配值而无需调用属性? 前任: RoundedDouble count; count = 5; 而不是使用 RoundedDouble cou
这是我的代码: #include typedef struct { const char *description; float value; int age; } swag
在创建嵌套列表时,我认为 R 具有对列表元素有用的命名结构。我有一个列表列表,并希望应用包含在任何列表中的每个向量的函数。 lapply这样做但随后剥离了列表的命名结构。我该怎么办 lapply嵌套列
我正在做一个用于学习目的的个人组织者,我从来没有使用过 XML,所以我不确定我的解决方案是否是最好的。这是我附带的 XML 文件的基本结构:
我是新来的 nosql概念,所以当我开始学习时 PouchDB ,我找到了这个转换表。我的困惑是,如何PouchDB如果可以说我有多个表,是否意味着我需要创建多个数据库?因为根据我在 pouchdb
我是一名优秀的程序员,十分优秀!