{
FILE *fBackup = NULL;
struct dirent *dp = NULL;
DIR *pdir = NULL;
int retval = 0;
char *pChr = NULL;
mode_t mode = 0;
UINT16 devID = 0;
UINT16 fileNum = 0;
char fileName[50];
char strDevID[10];
IRARRAY_CTRL *pCtrl = NULL;
ERR ret = OK;
UINT32 len = 0;
/* 参数判断 */
if (chan > irChanNum)
{
PRT(PRT_ERR, "%s: at Line:%d input param is NULL \r\n", __FUNCTION__, __LINE__);
return ERR_DSP_INVALID_PARAM;
}
pCtrl = irCtrl + chan;
devID = pCtrl->devID;
do
{
/* 检测目录是否存在 */
retval = access("./backup", F_OK);
if(retval != 0)
{
/* 不存在则创建新目录 */
mode = umask(0);
mkdir("./backup", 0777);
umask(mode);
Task_sleep(1); //等待文件创建,否则有概率导致文件流读取失败
}
/* 获取目录下的文件流 */
pdir = opendir("./backup");
if (pdir == NULL)
{
PRT(PRT_ERR, "%s at line:%d opendir Err!%s\n",__FUNCTION__, __LINE__, strerror(errno));
return ERR_DSP_FAILED_PROCESS;
}
/* 轮询文件流,查找当前传感器是否备份 */
sprintf(fileName, "DevID_");
sprintf(strDevID, "%x", devID); /* 获取设备ID */
while(1)
{
/* 获取一个文件指针 */
dp = readdir(pdir);
if (dp == NULL)
{
/* 文件流结尾退出循环 */
break;
}
/* 检查文件名 */
pChr = strstr(dp->d_name, fileName);
if ((pChr == NULL) || (pChr != dp->d_name))
{
/* 找不到"DevID_"字符串,或返回指针不是文件名的头指针,判断为其他文件跳过 */
continue;
}
pChr = pChr + strlen(fileName); /* 指向文件ID号 */
/* 检查文件名ID */
if (strcmp(strDevID, pChr) == 0)
{
fileNum++;
break;
}
}
closedir(pdir);
}while (0);
/* 已备份,退出 */
if (fileNum != 0)
{
return OK;
}
ret = IRARRAY_DumpEE(chan, pCtrl->dumpEE);
if (ret != OK)
{
PRT(PRT_ERR, "%s at line:%d Err!%s\n",__FUNCTION__, __LINE__);
return ERR_DSP_FAILED_PROCESS;
}
do
{
sprintf(fileName, "./backup/DevID_%x", devID);
fBackup = fopen(fileName, "wb+");
if (fBackup == NULL)
{
PRT(PRT_ERR, "%s at line:%d fopen Err!%s\n",__FUNCTION__, __LINE__, strerror(errno));
return ERR_DSP_FAILED_PROCESS;
}
len = sizeof(pCtrl->dumpEE);
retval = fwrite((void *)pCtrl->dumpEE, 1, len, fBackup);
if (retval != len)
{
PRT(PRT_ERR, "%s at line:%d, write:%d, Need:%d !%s\n",__FUNCTION__, __LINE__, retval, len);
ret = ERR_DSP_FAILED_PROCESS;
break;
}
PRT(PRT_INFO," Backup DevId:%x OK !\n", devID);
}while(0);
fclose(fBackup);
fBackup = NULL;
return ret;
}
目录、文件的创建、读取、判断例程
最新推荐文章于 2022-08-18 17:45:32 发布