【问题标题】:Which system call does the Linux file command use?Linux 文件命令使用哪个系统调用?
【发布时间】:2025-12-02 07:35:02
【问题描述】:

你知道 Linux file 命令使用哪个系统调用来确定文件的类型吗?

在命令行中,如果你使用 file 命令,它会回复如下内容:

dev-1:~/$ 文件下载.png

download.png:PNG 图像数据,724x 724,8 位/彩色 RGBA,非隔行扫描

这是一个完整的例程吗?或者是否有映射到该功能的系统调用?

【问题讨论】:

  • 使用 strace 找出来。
  • @stark 我从来不知道它的存在。我现在正在阅读手册页,我会尝试一下。谢谢
  • 为什么你认为file使用系统调用来判断文件类型?这种任务可以而且应该在用户空间级别完成,请查看file 源代码。
  • 最有可能使用open/read

标签: linux file filesystems system-calls


【解决方案1】:

根据@stark 的建议,我运行了Linux strace 命令,如下所示:

$ strace file download.png

返回了很多信息(许多系统调用),但我通过它挑选并找到了我正在寻找的核心项目:

fstat(3, {st_mode=

我搜索了found a man page for fstat:

这些函数 [lstat, fstatat] 在指向的缓冲区中返回有关文件的信息 通过 statbuf。

还有一个对pread64() 的调用(或多个调用),它从文件描述符中读取数据。

【讨论】:

    【解决方案2】:

    您好,我有一些有用的 Linux 文件命令希望对您有用

    file bobs_file.txt
    

    输出 = bobs_file.txt: ASCII

    file textfile.tar
    

    输出 = textfile.tar:POSIX tar 存档 (GNU)

    file Picture/
    

    输出 = 图片/: 目录

    file iuk.png
    

    output = iuk.png:PNG 图像数据,213 x 213,8 位/彩色 RGB,非隔行扫描

    【讨论】:

    • 嗯...这是一个命令的多个示例,而不是多个命令。我在问题中提到的文件命令。而且,我问你是否知道 file 命令实际运行的系统调用(OS API 方法)。
    最近更新 更多