1

私は 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!");
}

バグ:-

プログラムを実行してファイルへの出力を確認すると、as が何もない場所にしか書かれ'input0.txt'ていません。 最初の 2 つのファイルとには書き込めますが、2 番目の 2 つのファイルとには書き込めません。"HELLO!"'peak1.txt'
filefile2peak1peak2

いろいろ書いてみましたがだめでした。何が問題なのですか?

ありがとう!

4

2 に答える 2

1

最後に電話するのを忘れましfclose(FILE *)た。を呼び出すint fclose(FILE *fp);と、ファイル記述子が適切に破棄され、出力バッファーがフラッシュされ、ファイルに書き込まれたデータがディスク上のファイルに存在することが保証されます。

出典: IEEE Std 1003.1、2004年版:

int fclose(ファイル *ストリーム);
このfclose()関数は、stream が指すストリームをフラッシュし、関連するファイルを閉じます。ストリームの未書き込みのバッファリングされたデータはファイルに書き込まれます。未読のバッファリングされたデータは破棄されます。呼び出しが成功するかどうかにかかわらず、ストリームはファイルから関連付けを解除され、setbuf()またはsetvbuf()関数によって設定されたバッファはストリームから関連付けが解除されます。関連付けられたバッファが自動的に割り当てられた場合は、割り当てが解除されます。

于 2013-07-27T16:54:33.890 に答える
1

fclose(FILE *)コードの最後で呼び出す必要があります。

Cライブラリ関数 intはfclose(FILE *stream)ストリームを閉じます。すべてのバッファがフラッシュされます。

于 2013-07-27T16:56:11.943 に答える