Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在Linux上如何通过inode访问文件_C_Linux_Filesystems_Kernel_Ext4 - Fatal编程技术网

C 在Linux上如何通过inode访问文件

C 在Linux上如何通过inode访问文件,c,linux,filesystems,kernel,ext4,C,Linux,Filesystems,Kernel,Ext4,是否有任何用户空间API或第三方内核模块可以帮助Linux上的inode访问文件 我正在尝试实现以下功能: int read_file_by_ino(int ino, int pos, int size, char* buf); int write_file_by_ino(int ino, int pos, int size, const char* buf); int readdir_by_ino(...); int stat_by_ino(...); ... 该程序应在root用户下运行,

是否有任何用户空间API或第三方内核模块可以帮助Linux上的inode访问文件

我正在尝试实现以下功能:

int read_file_by_ino(int ino, int pos, int size, char* buf);
int write_file_by_ino(int ino, int pos, int size, const char* buf);
int readdir_by_ino(...);
int stat_by_ino(...);
...

该程序应在root用户下运行,因此没有进行权限检查的安全要求。

不确定我是否正确理解了您的问题,但:
您可以从“/”目录开始,然后递归地(或任何循环)处理子目录。将inode值与struct stat.ino\u t进行比较。一旦找到它,就打开路径/文件。

我不知道是否有更简单的方法,但你可以用bash来实现。使用ls-i命令,您也可以看到索引节点

$ ls -i
11147622 file.txt
第一列是inode编号,blow命令显示当前目录中的inode

$ ls -i | awk {'print $1'}
因此,您需要检查/too所有子目录中的索引节点,直到找到它为止

ls -iR /
它显示了所有子目录和具有索引节点编号的文件


现在,您应该从/开始,使用awk to或cut命令获得第一列(inode编号在第一列中),然后将其与要查找的inode进行比较

我发现这个问题与类似的话题有关

总结一下,查看以下命令:

  • find/path/to/mountpoint-inum
  • sudo debugfs-R'ncheck 393094'/dev/sdaX 2>/dev/null

希望这有助于您进一步调查。

可能没有,为什么要问?这看起来像一场可靠性噩梦。因此,这肯定是一个坏消息idea@BasileStarynkevitch我正在实现一个fuse程序,它需要操作远程文件系统,fuse低级API使用I节点号。然而,fuse高级API与path一起工作,但我认为会有一些性能损失。很好的答案是“为什么?”: