文本文件不会存在某个字节的值为 0 的情况。
判断逻辑:
#define FIRST_FEW_BYTES 8000
int buffer_is_binary(const char *ptr, unsigned long size)
{
if (FIRST_FEW_BYTES < size)
size = FIRST_FEW_BYTES;
return !!memchr(ptr, 0, size);
}
file 命令功能非常强大,可以显示出每个文件的具体类型。如果只是简单的区分文本文件和二进制文件,可以判断文件是否为 ASCII text
,如果是,则为文本文件;反之,为二进制文件。
[root@]# file 1.txt
1.txt : C source, ASCII text
[root@]# file time
time: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
[root@]# file 11.avi
11.avi: RIFF (little-endian) data, AVI, 640 x 640, 30.00 fps, video: FFMpeg MPEG-4, audio: MPEG-1 Layer 3 (mono, 44100 Hz)
[root@]# file 4345559.png
4345559.png: PNG image data, 888 x 1038, 8-bit colormap, non-interlaced