无法打开2文件*

时间:2013-07-27 16:52:13

标签: c file raspberry-pi printf

我正在研究用于Raspberry PI开发的C程序,我一直在收到这个奇怪的错误。

老实说,我对它的起源一无所知。到目前为止,该计划非常简单。

#include <bcm2835.h>
#include <time.h>
#include <sys/time.h>
#include <stdint.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>

int main(int argc, char *argv[])
{
    FILE *file; 
    FILE *file2; 
    FILE *peak1;
    FILE *peak2; 
    file = fopen("input0.txt", "a+"); 
    file2 = fopen("input1.txt", "a+"); 
    peak1=fopen("peak1.txt", "a+");
    peak2=fopen("peak2.txt", "a+");

    fprintf(file, "%s\n", "HELLO!");
    fprintf(peak1, "%s\n", "HELLO!");
}

错误: -

当我运行程序并检查文件的输出时,只有'input0.txt'写有"HELLO!"'peak1.txt'没有任何内容。
我可以写入前两个文件filefile2,但无法写入后两个文件peak1peak2

我尝试过多次写作,但无济于事。可能是什么问题呢?

谢谢!

2 个答案:

答案 0 :(得分:1)

你忘了在最后致电fclose(FILE *)。调用int fclose(FILE *fp);将确保正确处理文件描述符并刷新输出缓冲区,以便写入文件的数据将出现在磁盘上的文件中。

来自:IEEE Std 1003.1, 2004 Edition

  

int fclose(FILE *stream);
  fclose()函数将导致流指向的流   刷新并关闭相关文件。 任何不成文的   流的缓冲数据应写入文件; 任何未读的数据   缓冲数据应被丢弃。无论通话是否成功,   流应与文件和任何设置的缓冲区取消关联   setbuf()setvbuf()函数应与[{1}}或{{1}}函数解除关联   流。如果自动分配了相关的缓冲区,则应该   被解除分配。

答案 1 :(得分:1)

您需要在代码末尾调用fclose(FILE *)

C库函数int fclose(FILE *stream)关闭流。刷新所有缓冲区。