我需要使用 C 语言了解磁盘(在 Linux 机器中)上文件系统的创建日期时间。我想避免使用 shell 命令,例如
tune2fs -l /dev/sdb2 | grep 'Filesystem created:'
并制作一个解析器。
谢谢
最佳答案
从用 C(或任何能够调用 C 例程的语言)编码的程序中,您将使用 stat(2) 系统调用(或者,使用最近内核和某些文件系统中,statx(2) 一)查询给定文件(或目录)的创建时间。当然,像 ls(1) 或 stat(1) 这样的命令在内部使用 stat(2) 系统调用。
没有标准且与文件系统无关的方法来获取给定 file system 的创建时间。该信息并不总是被保留。我猜想 FAT 文件系统或 distributed file systems 例如 NFS ,不要保留它。
您可以在该文件系统的挂载点上使用 stat(2)。
statfs(2)系统调用检索一些文件系统信息,但不提供任何时间戳。
对于 ext4 文件系统,请参阅 ext4(5) 并使用 proc(5) 。您可能会解析 /proc/mounts
和一些 /proc/fs/ext4/*/
目录。 /proc/
中的伪文件可以是parsed quickly,通常不会涉及物理磁盘IO。
您还可以在 ext2/3/4 disk partition 级别、未安装文件 ext[234]
系统上工作,使用类似的库(或来自的程序) e2fsprogs。如果安装了某个文件系统,则不应访问(即使只是读取)包含该文件系统的磁盘分区。
(你的问题应该给出一些动机和背景)
关于c - 在 C 中获取文件系统创建日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47979775/