Linux 文件命令使用哪个系统调用?

Which system call does the Linux file command use?

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

在命令行上,如果你使用文件命令,它会回复类似这样的内容:

dev-1:~/$ file download.png

download.png: PNG image data, 724x 724, 8-bit/color RGBA, non-interlaced

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

嗨,我为您提供了一些有用的 Linux 文件命令,希望它在下面有用

file bobs_file.txt

输出=bobs_file.txt:ASCII

file textfile.tar

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

file Picture/

输出=图片/:目录

file iuk.png

output = iuk.png: PNG图像数据,213 x 213, 8-bit/color RGB, non-interlaced

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

$ strace file download.png

返回了很多信息(很多系统调用),但我仔细挑选了一下,找到了我要找的核心项目:

fstat(3, {st_mode=

我搜索过 found a man page for fstat:

These functions [lstat, fstatat] return information about a file, in the buffer pointed to by statbuf.

还有一个(或多个)调用 pread64() 从文件描述符中读取。