2012-04-30 30 views
1

我有下面的代碼。我想逐行寫出所有新數據,我該怎麼做?我的代碼工作正常,但它將數據寫入對方。fwrite逐行?

//////////////////////////////////// 
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進行設置。