【问题标题】:Get filesystem creation date in C在 C 中获取文件系统创建日期
【发布时间】:2018-06-07 08:47:40
【问题描述】:

我需要知道使用 C 的磁盘(在 Linux 机器中)上文件系统的创建日期时间。我想避免使用 shell 命令,例如

tune2fs -l /dev/sdb2 | grep 'Filesystem created:' 

并制作一个解析器。

谢谢

【问题讨论】:

  • 我正在搜索文件系统创建日期时间。文件的创建日期时间很容易编辑。
  • tune2fs 支持 ext2/ext3/ext4,所以你想知道 ext 文件系统创建日期时间?
  • 是的。我的硬盘是 ext4。
  • 在大多数 Unix 文件系统上你不能;只有 {ctime,mtime,atime} 而ctime不是time_of_creation,而是inode属性(如rwx)的time_of_change
  • 你能澄清你的问题吗?您想知道超级块的布局以便提取s_mkfs_time 成员吗?您需要一些示例 GPL 源代码吗?一些示例非 GPL 源代码? tune2fs 中可以做你想做的部分是github.com/tytso/e2fsprogs/blob/master/lib/e2p/ls.c#L314

标签: c linux filesystems partition ext4


【解决方案1】:

从用 C(或任何能够调用 C 例程的语言)编码的程序中,您将使用 stat(2) 系统调用(或者,使用 recent 内核和 some 文件系统,statx(2) 一)查询给定文件(或目录)的创建时间。当然,像ls(1)stat(1) 这样的命令在内部使用的是stat(2) 系统调用。

没有标准且文件系统中立的方法来获取给定file system 的创建时间。这些信息并不总是保留。我猜FAT 文件系统或distributed file systemsNFS,不要保留它。

您可以在该文件系统的挂载点上使用stat(2)

statfs(2) 系统调用检索一些文件系统信息,但不提供任何时间戳。

对于 ext4 文件系统,请参阅 ext4(5) 并使用 proc(5)。您可能会解析 /proc/mounts 和一些 /proc/fs/ext4/*/ 目录。 /proc/中的伪文件可以是parsed quickly,一般不会涉及物理磁盘IO。

您还可以在 ext2/3/4 disk partition 级别上工作,在 unmounted 文件 ext[234] 系统上使用类似 e2fsprogs 的库(或来自的程序)。如果该文件系统已挂载,则不应访问(甚至只是读取)包含某些文件系统的磁盘分区。

(你的问题应该给出一些动机和背景)

【讨论】:

  • 感谢您的回复。我会检查你的样品。
猜你喜欢
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2011-06-13
  • 2013-07-07
相关资源
最近更新 更多