#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h>
#include <fcntl.h>
int CopyFile(char *pcDstFile, char *pcSrcFile)
{
FILE *fpr = NULL;
FILE *fpw = NULL;
int iLen = 0;
int iFileLen = 0;
int iSize = 0;
char acBuf[4096];
if (NULL == pcDstFile || NULL == pcSrcFile)
{
return -1;
}
fpr = fopen(pcSrcFile, "rb");
if (fpr == NULL)
{
perror("open read file:");
return -1;
}
fpw = fopen(pcDstFile, "wb");
if (fpw == NULL)
{
printf("[%s]open write file %s\n", __FUNCTION__, pcDstFile);
perror("open write file error:");
return -1;
}
while (1)
{
iLen = fread(acBuf, 1, sizeof(acBuf), fpr);
if (iLen <= 0)
{
printf("read file over\n");
break;
}
iSize = fwrite(acBuf, 1, iLen, fpw);
if (iSize != iLen)
{
perror("wirte file error:");
fclose(fpr);
fclose(fpw);
return -1;
}
iFileLen += iLen;
}
fflush(fpw);
fsync(fileno(fpw));
fclose(fpr);
fclose(fpw);
return iFileLen;
}
int ModifyParam(char *pcFileName, char *pcKey, char *pcValue)
{
FILE *pOldFile = NULL;
FILE *pNewFile = NULL;
char acTmpName[128];
char acBuf[256];
int iFlag = 0;
pOldFile = fopen(pcFileName, "rb");
if (NULL == pOldFile)
{
printf("[%s] open file %s error\n", __FUNCTION__, pcFileName);
perror(":");
return -1;
}
snprintf(acTmpName, sizeof(acTmpName), "%s~", pcFileName);
pNewFile = fopen(acTmpName, "wb");
if (NULL == pNewFile)
{
printf("[%s] open file %s error\n", __FUNCTION__, acTmpName);
perror(":");
fclose(pOldFile);
return -1;
}
while (fgets(acBuf, sizeof(acBuf), pOldFile))
{
if (memcmp(acBuf, pcKey, strlen(pcKey)) == 0)
{
snprintf(acBuf, sizeof(acBuf), "%s=%s\n", pcKey, pcValue);
fputs(acBuf, pNewFile);
iFlag++;
}
else
{
fputs(acBuf, pNewFile);
}
}
// 如果没有此项,则添加一项
if (0 == iFlag)
{
snprintf(acBuf, sizeof(acBuf), "%s=%s\n", pcKey, pcValue);
fputs(acBuf, pNewFile);
}
fflush(pNewFile);
fsync(fileno(pNewFile));
fclose(pOldFile);
fclose(pNewFile);
//rename(acTmpName, pcFileName);
CopyFile(pcFileName, acTmpName);
return 0;
}
int ReadParam(char *pcFileName, char *pcKey, char *pcValue)
{
FILE *pFile = NULL;
char acBuf[128];
char *pcPos = NULL;
int iLen = 0;
int iRet = -1;
pFile = fopen(pcFileName, "rb");
if (NULL == pFile)
{
printf("[%s] open file %s error\n", __FUNCTION__, pcFileName);
perror(":");
return -1;
}
while (fgets(acBuf, sizeof(acBuf), pFile))
{
if (memcmp(acBuf, pcKey, strlen(pcKey)) == 0)
{
pcPos = acBuf;
strsep(&pcPos, "=");
if (NULL == pcPos)
{
printf("line:%s, param error!!!\n", acBuf);
break;
}
iLen = strlen(pcPos);
if (iLen > 0)
pcPos[iLen-1] = '\0';
strcpy(pcValue, pcPos);
iRet = 0;
break;
}
}
fclose(pFile);
return iRet;
}
评论0