2012-04-30 11 views
1

私は以下のコードを持っています。私はすべての新しいデータを1行ずつ書きたいと思いますが、どうすればいいですか?私のコードは正常に動作しますが、データは互いに隣に書き込まれます。行を1行ずつ書き換えますか?

//////////////////////////////////// 
char timedate[13]; 
char USERID[] ="100050"; 
char *p; 
p=fetch_time(); //the function returns a string (char[13]) 
strcpy(timedate, p); 

char log_sensor_event[20]; 
sprintf(log_sensor_event, "%s %s",timedate, USERID); 

FILE *fp2; 
fp2=fopen("/home/eagle/Desktop/log_file.txt", "ab"); 
if(fp2 == NULL){ 
    perror("log_file.txt open failed"); 
    exit(EXIT_FAILURE); 
} 
write(log_sensor_event, sizeof(log_sensor_event[0]), sizeof(log_sensor_event)/sizeof>(log_sensor_event[0]), fp2); 
fputc('\n', fp2); 
fclose(fp2); 

答えて

2

あなたは('\n')文字列間の文字を改行を挿入する必要があります。

sprintf(log_sensor_event, "%s %s\n",timedate, USERID); 

最後の '\ n'に注意してください。

+0

関数自体のために未使用のパラメータがあります – johan

+0

このコメントの意味が分かりません – Attila

3

あなたは改行せずに文字列を作成します。

sprintf(log_sensor_event, "%s %s",timedate, USERID); 

はこれを試してみてください:

sprintf(log_sensor_event, "%s\n %s",timedate, USERID); 
1

あなた

char log_sensor_event[20]; 
sprintf(log_sensor_event, "%s %s",timedate, USERID); 

... 
write(log_sensor_event, sizeof(log_sensor_event[0]), sizeof(log_sensor_event)/sizeof>(log_sensor_event[0]), fp2); 
fputc('\n', fp2); 

を置き換えるだけで

fprintf(fp2, "%s %s\n", timedate, USERID); 

によってこれはコールとローカルバッファの多くを回避できないのはなぜ。

I/Oのバッファリングは、setvbufで設定できます。

関連する問題