检查文件在C语言中是否为纯文本

检查文件在C语言中是否为纯文本,c,linux,file,types,C,Linux,File,Types,如果文件是文本文件(例如UTF或ASCII),是否有办法在Linux C中进行检查?在bash中,我们有程序文件。在C语言中有等价物吗 这是我在C中验证文本文件的函数。我使用popen,但它不能正常工作。有时我在pclose中出错。我需要在代码中编辑什么 int check_file(char *path) { FILE *file_type; char command[] = "/usr/bin/file"; char command_to_execute[512]; char che

如果文件是文本文件(例如UTF或ASCII),是否有办法在Linux C中进行检查?在bash中,我们有程序文件。在C语言中有等价物吗

这是我在C中验证文本文件的函数。我使用popen,但它不能正常工作。有时我在pclose中出错。我需要在代码中编辑什么

int check_file(char *path)
{
 FILE *file_type;
 char command[] = "/usr/bin/file";
 char command_to_execute[512];
 char check[512];
 int correct = 0;
 sprintf(command_to_execute,"%s %s",command,path);
 file_type = popen(command_to_execute,"r");
 if(file_type == NULL)
 {
   return correct;
 }
 fgets(check,512,file_type);
 char *pointer;
 pointer = strstr(check,"ASCII"); 
 if(pointer != NULL)
    correct = 1;
 pointer = strstr(check,"UTF");
 if(pointer != NULL)    
    correct = 1;          
 pclose(file_type);
 return correct;
}
文件是一个程序,不是bash函数;您可以读取文件并检查非ascii字符。如果您发现任何输出为false并停止处理,如果您到达文件输出的末尾为true。

您可以使用来测试字符串是否与特定编码匹配。
另一种方法是使用libmagic库来实现文件。读取文件,看看它是否包含文本。systemfile+namefile;正确,但仅适用于普通ASCII文件。即使如此:ASCII或ascci作为OP的名称,这是一个很难理解的概念。允许退格吗?允许使用表单提要吗?CTR+Z是一个有效的文件结尾,即使后面跟着二进制垃圾,还是会导致非纯文本?UTF8/UTF16也有类似的问题:您可以证明它只包含有效的UTF8/UTF16序列,但这本身并没有说明什么。虽然反向-一个无效的序列-证明它不是一个文本文件。