- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试实现我自己的 pwd
命令。要找到整个路径,我需要遍历 inode
树直到到达根目录,判断我已经到达根目录的方法是检查相等的 inode
为 .
和 ..
.
但在我的 Mac 上情况似乎并非如此,至少如果您查看下表。
dirent | stat | link to
-----------+------------+--------
34078072 | 34078072 | self
31103058 | 31103058 | parent
31103058 | 31103058 | self
31103020 | 31103020 | parent
31103020 | 31103020 | self
613497 | 613497 | parent
613497 | 613497 | self
603204 | 603204 | parent
603204 | 603204 | self
157433 | 157433 | parent
157433 | 157433 | self
2 | 2 | parent
2 | 2 | self // This is root aka /
1 | 2 | parent // There is something above it?
这是使用下面的代码生成的。 stat
结构似乎运行良好,但 dirent
在涉及 /
时具有不同的值。为什么会这样? dirent
和 stat
不应该具有相同的 inode 编号值吗?为什么它在 Mac 上有所不同?
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
#include <unistd.h>
void inodes();
int main()
{
printf(" dirent | stat | link to\n");
printf("-----------+------------+--------\n");
inodes();
return 0;
}
void inodes()
{
DIR* directory = opendir(".");
struct dirent* entry = NULL;
struct stat status;
ino_t self = -1;
ino_t parent = -1;
while ((entry = readdir(directory))) {
stat(entry->d_name, &status);
if (strcmp(entry->d_name, ".") == 0) {
self = status.st_ino;
printf("%10.llu | %10.llu | self\n", entry->d_ino, self);
}
if (strcmp(entry->d_name, "..") == 0) {
parent = status.st_ino;
printf("%10.llu | %10.llu | parent\n", entry->d_ino, parent);
}
}
if (self != parent) {
if (chdir("..") != -1) {
inodes();
}
}
}
最佳答案
在 Macintosh HFS+ 文件系统上,每个文件和文件夹都有一个唯一的“文件ID”。该文件系统在 Apple 的 "Technical Note TN1150 – HFS Plus Volume Format" .
特别是,根文件夹总是有文件 ID 2 和父文件夹ID 1。在 TN1150 中,这些记录为
enum {
kHFSRootParentID = 1,
kHFSRootFolderID = 2,
...
}
kHFSRootParentID
Parent ID of the root folder.
kHFSRootFolderID
Folder ID of the root folder.
HFS+ 文件系统上的 inode 准确反射(reflect)文件 ID。这或许可以解释为什么 readdir()
报告 inode2
代表“.”根文件夹的条目,inode 1
为根文件夹的“..”条目。 (但我对这一事实没有明确的引用。可以尝试在以下位置找到源代码 http://www.opensource.apple.com :)
另一方面,根文件夹中的“..”始终是指向根文件夹本身。因此,当
stat(entry->d_name, &status);
为“..”条目执行,根文件夹上的 stat()
已完成,所以这再次给出 inode 2
。
关于c - 为什么 `.` 和 `..` 在 Mac 上的 `/` 内部有不同的 inode 编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33488420/
我可以查看 linux 内核的 inode 结构中的哪些值来判断我当前正在查看的 inode 是目录还是常规文件? 我已经搜索了 inode 但似乎真的找不到一个看起来像我想要的成员,因为我使用的是旧
我试图了解 inode 位图和 inode 表之间的区别(来自 ext2 文件系统文档),但我不明白。谁能解释一下? 最佳答案 位图只占一个 block ,是一个0和1的序列,其中0表示对应的inod
我们使用 Amazon EBS 在 3 级目录结构中存储大量小文件 (<10KB)。 ~/lists# df -hFilesystem Size Used Avail Use
我正在创建一个简单的 debugfs里面的文件/sys/kernel/debug/test/testFile使用以下代码: pDebugfs = debugfs_create_dir(name, NU
我的 VPS (CentOS 6.3.8.13 Parallels Plesk Panel) 已达到 inodes 限制: [root@vps21157 tmp]# df -i Filesystem
我阅读了 minix 的 API,但仍然感到困惑,无法仅通过 inode 编号获得“真正的”inode 结构 我们只能用“stat”结构得到“inode number”,对吧?但是得到这个数字后,有没
我发现在大多数情况下,i_data 只是 i_mapping 的解引用数据,如下所示,为什么在一个 inode 结构中设置两个相同的值? crash> struct inode ffffffc073c
我想知道为什么以下代码无法工作: public static List cloneList(List list) { List result = new ArrayList(list.siz
我需要用 C/C++ 编写一个程序,要求用户输入一个 inode 编号,然后返回所有 inode header 字段和信息。我对linux系统和命令一点都不熟悉。我找到了一些命令并尝试了不同的东西,但
由于我们的文件系统实现仅将 inode 存储在内存中,因此我们不想浪费更多的 inode 缓存。 在VFS下,我们计划不将新的inode添加到inode cache hash talbe中,也不将其添
代码是: void ext2_read_inode (struct inode * inode) { struct buffer_head * bh; struct ext2_inod
根据 struct ext4_inode { ..... __le16 i_extra_isize; ..... } 鉴于我使用的 inode 大小 = 256 字节,我看到这可以用于存
我正在阅读有关第 6 版 unix 的文章,并且刚刚了解了 inode。我有以下问题: 假设我在一个目录中有一个文件,并且在其他地方有一个指向该文件的链接。我是否正确地说,如果我删除文件,inode
我了解文件描述符是用于识别文件的内核句柄,而文件的 inode 编号是指向具有有关文件的其他详细信息的结构的指针(如果我错了,请纠正我)。但我无法区分它们。 最佳答案 根本区别在于,inode 代表文
Linux 上的 inode 限制是按子目录还是按整个文件系统?我使用 ububtu 64 位服务器 9.10。 如果是目录限制,是否可以通过将文件拆分为多个子目录来解决 inode 限制? 最佳答案
我知道unix系统中的文件是由它们的inode来表示的。 作为用户,我可以访问这些值并更改它们吗? 也就是说,替换两个相邻 block 之间的值,这样就改变了文件? 我可以只覆盖中间的一个 block
因此,我的托管服务对我的服务器( inode )上的 INODES 有限制。每个目录/文件 = 1 个 INODE。这可能是将来的一个问题,因为我想在我的网站中实现文件共享。理论上我不能将文件数据存储
在 linux 上,ext4 分区上有一部电影,如果我打开电影并观看它,然后我移动或重命名电影。 在之前的缓存用完后,它需要从原始文件中读取更多的缓存,然后它仍然可以这样做。 问题是: 文件系统和 i
有人可以告诉我如何计算目录中文件的 inode 数量吗? 谢谢。 最佳答案 有一个inode每个目录,其中的每个文件一个。如果您对文件进行符号链接(symbolic link),则符号链接(symbo
我最近了解了 Unix inode 及其用途。特别是,我了解到 an.inode 在文件系统中是唯一的。 我的问题是:如果用户将 Micro SD 卡插入他们的 Android 设备,该卡会成为现
我是一名优秀的程序员,十分优秀!