1

我正在用 C 语言编写一个用于 Raspberry PI 开发的程序,我遇到了这个奇怪的错误。

老实说,我不知道它的起源。到目前为止,该程序非常简单。

#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'
filefile2peak1peak2

我试过写很多东西,但无济于事。可能是什么问题呢?

谢谢!

4

2 回答 2

1

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

来自:IEEE Std 1003.1,2004 版

int fclose(FILE *stream);
fclose()函数应导致流指向的流被刷新并关闭相关文件。流的任何未写入缓冲数据都应写入文件;任何未读的缓冲数据都将被丢弃。无论调用是否成功,流都应与文件解除关联,并且由setbuf()orsetvbuf()函数设置的任何缓冲区都应与流解除关联。如果关联的缓冲区是自动分配的,则应将其释放。

于 2013-07-27T16:54:33.890 回答
1

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

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

于 2013-07-27T16:56:11.943 回答