基于linux操作系统,编写存储功能,在网上搜了几个例子,一直报创建错误,
fopen(SAVE_PATH_OWN_INF_FILE, "w+")
fopen(SAVE_PATH_OWN_INF_FILE, "a+"),
使用这两个创建均失败,最后发现创建可以用以下示例:已测试OK
若未写LOG_ERROR等处理,改为printf即可。
示例
void test(void)
{
const char barcode_to_write[30] = "1234567890"; // 要写入的条形码
char barcode[30]; // 假设条形码不会超过99个字符
FILE* file;
//test 1 --------------
printf("open file\r\n");
file = fopen(SAVE_PATH_OWN_INF_FILE, "w+"); // 使用 "w+" 模式以写入方式打开文件,如果文件不存在则创建它
if (file == NULL) {
fprintf(stderr, "Failed to create barcode file: %s\n", strerror(errno));
// 尝试创建文件路径
char* directory = strdup(SAVE_PATH_OWN_INF_FILE);
char* ptr = directory;
while ((ptr = strchr(ptr, '/')))
{
*ptr = '\0';
mkdir(directory, 0777);
*ptr = '/';
ptr++;
}
// 再次尝试打开文件
file = fopen(SAVE_PATH_OWN_INF_FILE, "w+");
if (file == NULL) {
fprintf(stderr, "Failed to create barcode file: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
else
{
LOG_INFO("open file success");
}
}
pthread_mutex_lock(&p_mutexOwnInf); //os changes
printf("write file\r\n");
fwrite(&barcode_to_write,sizeof(barcode_to_write),1,file);
pthread_mutex_unlock(&p_mutexOwnInf); //os changes
fclose(file);
sleep(1);
//test 2 --------------
file = fopen(SAVE_PATH_OWN_INF_FILE, "r");//"r");
// 读取条形码
fread(&barcode,sizeof(barcode),1,file) ;
printf("Retrieved barcode: %s\n", barcode);
fclose(file);
}