在C中向文件(未识别为可读文件)发出写操作

在C中向文件(未识别为可读文件)发出写操作,c,file,output,fwrite,C,File,Output,Fwrite,知道为什么不把每个字符打印到我的输出文件中吗?当我检查输出文件时,将显示此消息 “gedit无法检测字符编码。 请检查您是否正在尝试打开二进制文件。 从菜单中选择一个字符编码,然后重试。使用utf-8编码 这是否可能是因为输出文件中写入了错误字符或空字符 因为当我在写入前检查每个字符时,它不是空的,并且与编码匹配 void *OUTgroup(void *arg) { sleep(); printf("OUT Thread working\n"); while(

知道为什么不把每个字符打印到我的输出文件中吗?当我检查输出文件时,将显示此消息

“gedit无法检测字符编码。 请检查您是否正在尝试打开二进制文件。 从菜单中选择一个字符编码,然后重试。使用utf-8编码

这是否可能是因为输出文件中写入了错误字符或空字符

因为当我在写入前检查每个字符时,它不是空的,并且与编码匹配

 void *OUTgroup(void *arg)
 {     
   sleep();

   printf("OUT Thread working\n");
   while(1)
   {
      if(head > tail)
        break;

      if(isEmpty())
        sleep(); 

       BufferItem item = readItem();


       writeFile(item.data, item.offset);

        sleep();
   }

   pthread_exit(0);
 }


void writeFile(char data, off_t offset)
{
   pthread_mutex_lock(&lock);

   /********* CRITICAL SECTION *********/
   if(fseek(file_out, offset, SEEK_SET) == -1)
   {
      printf("Did not successfully find position to output\n");
      exit(0);
   }
   if(fputc(data, file_out) == EOF) 
   {
     printf("Did not successfully write byte to output\n");
     exit(0);
   }
   /********* CRITICAL SECTION *********/
  pthread_mutex_unlock(&lock);
}

我的第一反应是你没有正确地关闭文件。尝试在执行结束时添加一段代码,以刷新并关闭文件描述符

fflush(file_out);
fclose(file_out);

您在没有参数的情况下调用的
sleep
函数是什么?它的
while(1){if(head>tail)break;..}
即使您不需要它,您是否也喜欢使用
break
?为什么不干脆
while(head sleep()只让线程睡眠1-0.01分钟呢seconds@geforce,选择与库函数名不冲突的函数名会更明智。
sleep()
是POSIX标准化函数,但POSIX版本需要睡眠时间(秒)作为参数。@geforce,您是否考虑过在十六进制编辑器中查看输出文件以确定其实际包含的内容?这可能会给您一个关于发生了什么的提示。不过,我的猜测是,您永远不会在偏移量0处写入任何内容(但一定要以更高的偏移量写入),这样,当您完成时,文件以一个或多个空字节开始,您从未写入任何内容。