当使用file
检查某些文件类型时,我注意到它似乎错误地将 C++ 文件标记为 C 文件:
$ file User.*
User.cpp: C source, ASCII text
User.h: C++ source, ASCII text
User.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
为什么它可以正确识别头文件,但不能正确识别cpp文件?
答案1
从命令的手册页来看file
,
file
命令实际上执行了 3 个测试来确定文件类型。
第一次测试
文件系统测试基于检查 stat(2) 系统调用的返回结果。
第二次测试
幻数测试用于检查具有特定固定格式数据的文件。
第三次测试
语言测试查找可能出现在文件前几个块中任何位置的特定字符串(参见 name.h)。例如,关键字 .br 表示该文件很可能是 troff(1) 输入文件,就像关键字 struct 表示 C 程序一样。
命令的输出file
通常基于任何成功测试的结果。
现在,假设 C++ 程序像这样启动,并且第三次测试成功,
#include <iostream.h>
bla
bla
根据第三个测试,关键字#include
特别指定它的类型C程序虽然我们有一个消费者保护计划程序在手。现在,当我检查时,
$ file example.cpp
example.cpp: ASCII C program text
现在,面向对象的概念是 C++ 特有的。让我们创建一个特定的文件C++。
我开始我的 C++ 程序,
Class something
{
}
bla
bla
现在,当我发出
$ file example.cpp
输出是,
example.cpp: ASCII C++ program text