2012-06-23 68 views
2

我们都知道,在linux目录下是一个特殊的文件,其中包含文件名和组成文件的inode数量。我想用标准的命令行工具读取这个目录文件的内容。读取目录文件

cat。给出了一个错误,我无法打开一个目录。 然而,很明显vim可能会使用readdir来理解这个文件的内容。它以格式化的方式显示目录文件的内容。我想要该文件的原始内容。这怎么可能 ??

+0

为什么你想这样做,假设它是可能的(我不认为这是)? – Mat

+0

只是为了它。它可以使用C程序完成,但我想用标准的可用工具来完成。 –

+0

您可以使用opendir和readdir命令实际读取目录的内容(不是原始内容)。这里是一个链接到示例程序http://dl.dropbox.com/u/56211033/myls.cpp –

回答

0

我认为stat可能是您正在查找的命令。

+0

你能否详细说明答案?我试着用printf做stat,但是没有给出任何东西 –

+0

只要使用'stat'就可以使用'cat'。 例如,'stat/bin'。 –

+0

我有一个目录testdir包含三个文件a,b和c。当我统计文件时,我会得到一些包含访问权限的输出,修改时间和所有内容,但不包含文件a,b和c的任何输出。我认为目录文件必须包含包含文件的名称。 –

1

据我所知,这是做不到的。我敢肯定dd会做,然后我发现下面

“目录” 失败,除非该文件是一个目录。大多数操作系统不允许对目录进行I/O操作,所以此标志的实用程序有限。

http://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html

所以我认为你有你的答案在那里。 dd支持它,可能还有许多其他实用程序,但这并不意味着linux允许它。

+0

只是出于好奇。为什么我不能以原始格式读取目录文件的内容。最终,它的文件有一些文字,对吗?因为,readdir(在dirent.h中声明)调用可以做到这一点,我想应该有一个手动的方式来做到这一点,除非readdir在内部使用系统调用。 –

+1

这可能只是API的设计者不能想到允许它的一个好理由,所以他们不允许它。这对我来说很重要,为什么他们不允许写作。如果您可以写入目录,则可能会破坏文件系统。我不认为你可以用同样的理由来阅读,但至少你会让你的代码与文件系统类型的细节紧密相关。目录存储的方式是文件系统类型(ext2,ext3等)的一个特性,而不是Linux本身。文件系统的用户应该只关心文件系统的功能,而不关心它们的实现。 –