在C编程中如何检查给定文件是否为二进制文件?

在C编程中如何检查给定文件是否为二进制文件?,c,C,我正在尝试检查给定文件是否为二进制文件。 我参考下面给出的链接来找到解决方案, 但是,给定的解决方案不能正常工作,如果我将.c文件作为参数传递,它就不能工作,它会给出错误的输出 我可以作为参数传递的可能文件: a、 出去 filename.c filename.txt filename.pl filename.php 所以我需要知道是否有任何函数或方法来解决这个问题 谢谢 注意:[如有任何疑问,请在否决投票前询问我]您需要清楚地定义二进制文件是什么,然后在此基础上进行检查 如果您只想基于文件扩

我正在尝试检查给定文件是否为
二进制文件。
我参考下面给出的链接来找到解决方案,

但是,给定的解决方案不能正常工作,如果我将
.c
文件作为参数传递,它就不能工作,它会给出错误的输出

我可以作为参数传递的可能文件:

a、 出去

filename.c

filename.txt

filename.pl

filename.php

所以我需要知道是否有任何函数或方法来解决这个问题

谢谢


注意:[如有任何疑问,请在否决投票前询问我]

您需要清楚地定义二进制文件是什么,然后在此基础上进行检查

如果您只想基于文件扩展名进行筛选,则创建一个您考虑二进制文件的列表,以及不考虑二进制文件的列表,然后基于此检查。


如果您有一个已知格式列表,而不是文件扩展名列表,请尝试以这些格式解析文件,如果它不解析/解析结果毫无意义,则它是一个二进制文件(出于您的目的)。

取决于您的操作系统,二进制文件以一个头文件开始,该头文件指定它们是可执行文件,并包含有关它们的若干信息(体系结构、大小、字节顺序等)。因此,通过解析这个头文件,您应该知道文件是否为二进制文件。如果您在mac上,请检查Mach-O文件格式,如果您在Linux上,则应为ELF格式。但是要注意,它有很多文档。

对于您/您的任务来说,什么是二进制文件?检查文件扩展名是否足够,或者是否需要解析文件。你也可以考虑为社区提供不工作的代码。不,我不检查扩展,我需要解析文件并发现文件是二进制的。我正在尝试实现CDO中的“GRIP”命令。你真的想检查文件中的每个字节以确保它在ASCII范围内吗?如果文件很大,你就要付出代价。Unicode和各种UTF编码呢?它们也是文本文件。或者是一个主要是ASCII但包含几个非ASCII字节的文件?你也可以考虑GRIP如何处理它:你在Linux上吗?如果是,只需使用命令“file”并查看输出。然后可以使用system()从C程序调用此命令。有关“file”命令输出的更多详细信息,请参阅man或查看此处-在类UNIX平台上,还有一个C接口
libmagic
,可用于检测文件类型