c - 如何写入文件?
问题描述
我有点陷入将内容写入文件的看似简单的问题。
有一个函数声明为void decode_log(uint8_t *data, uint32_t len)
在调试终端中打印一些信息,如下所示:
#define LOG_HEADER_LENGTH (16)
#define LOG_ENTRY_LENGTH (16)
static void decode_log(uint8_t *data, uint32_t len)
{
if(len<LOG_HEADER_LENGTH)
{
DEBUG_Print("Log header missing!\n");
}
else
{
DEBUG_Print("\n=== USAGE_LOG ===\n"
"Power cycles: %u\n"
"Unpause events: %u\n"
"Power-on time: %us\n"
"Unpaused time: %us\n",
get_uint32(data+0),
get_uint32(data+4),
get_uint32(data+8),
get_uint32(data+12));
}
data+=LOG_HEADER_LENGTH;
len-=LOG_HEADER_LENGTH;
if(!len)
{
DEBUG_Print("No phase entries\n");
return;
}
DEBUG_Print("Phase\tcount\tmin ms\tmax ms\ttotal ms\n");
int phase_num=0;
while(len>=LOG_ENTRY_LENGTH)
{
DEBUG_Print("%u\t%u\t%u\t%u\t%u\n", phase_num,
get_uint32(data+0),
get_uint32(data+4),
get_uint32(data+8),
get_uint32(data+12));
phase_num++;
data+=LOG_ENTRY_LENGTH;
len-=LOG_ENTRY_LENGTH;
}
if(len)
{
DEBUG_Print("Incomplete entry for phase %d\n", phase_num);
}
}
DEBUG_Print
上面简单地使用并printf
定义为:
#define DEBUG_Print(...) do{printf(__VA_ARGS__); fflush(stdout); }while(0)
上面的代码截断解码data
并将其打印到调试终端中。
现在我想将相同的信息保存到文件中。你能告诉我在哪里以及如何定义、打开和将内容写入文件吗?
解决方案
// Declare a file pointer
FILE *file = NULL;
// Open the file for writing
file = fopen("filename.log", "w");
if(file == NULL)
{
printf("Error: Cannot open file.\n");
return;
}
// Write to file
fprintf(file, "\n=== USAGE_LOG ===\n");
...
// Always close the file if you don't need it anymore
// This also flushes the content as soon as possible
fclose(file);
另外,请注意文件的内容在打开后立即清空。如果您不想这样做,请使用file = fopen("filename.log", "a");
将新日志添加到文件中。
推荐阅读
- laravel - 是否可以将找到的记录总数添加到列表过滤器标签?
- c - C 代码在 RHEL7 中构建并在 RHEL6 中部署,gdb 无法正常工作
- bash - macOS - 根据部分文件名创建文件夹(第 2 部分)
- c# - 如何在 pycharm 中调用 SOAP Web 服务?
- javascript - 更新行但未编辑下拉列时,DHTMLX dataProcessor 不选择下拉列表的选项值(它选择标签)
- java - Swagger UI 不显示所有标题值
- javascript - Google 广告 dfp js 代码未呈现所有广告位
- java - 如何通过从第一类调用第二类的方法来调用第三类的方法
- c# - 获取 ListView 内开关的选中状态
- r - 如何更换
特定列的值?