2013-07-27 31 views
1

我工作的一个程序下覆盆子PI的发展,我已经得到这个奇怪的错误。无法打开2 FILE *

老实说,我有关于它的起源毫无头绪。该计划迄今为止非常简单。

#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

我试图写多件事情,但无济于事。可能是什么问题呢?

谢谢!

回答

1

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

来自:IEEE Std 1003.1, 2004 Edition

int fclose(FILE *stream);
fclose()函数应使流指向流 被刷新,所述待闭合的相关联的文件。 任何未写入的 缓冲的数据流应写入文件;任何未读的 缓冲的数据将被丢弃。无论呼叫是否成功, 的流应从文件中分离出来,并且 setbuf()setvbuf()函数设置的任何缓冲器都应与 流分离。如果关联的缓冲区是自动分配的,则应解除分配 。

+0

附加已包含很多的头文件,我不知道你的项目,但对你的代码贴出你只需要''呀 –

+0

,我承认这一点。我打算让我的计划稍后再做更多,而且我知道我将来需要这些头文件。谢谢! – MEric

+0

@MEric *'我为什么那么可以写信给前两个文件(文件/文件2)如果我不要么关闭他们'* - ?因为它不只有经过'FCLOSE是指()'数据写入磁盘......但是'fclose()'在关闭文件前确定。阅读我的第一行回答 - 获取它**?** –

1

您需要在代码结尾处拨打fclose(FILE *)

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

+0

拼写错了''忘记'''打印'* ....你的意思'电话' –

+0

我会解决这个问题。 –

+0

好的,我会补充一点。但是,为什么我可以写入前两个文件(文件/文件2),如果我不关闭它们呢? – MEric