开发中遇到的问题(2015-09-12)

来源:互联网 发布:coloros升级软件 编辑:程序博客网 时间:2024/04/28 13:16

1.

FILE *fout = Null;

//这样打开时 就是把原文件中的内容清掉了。

if ((fout = fopen(pFile"w+")) != NULL)

{

PR("");

//DPRINTHEX("buffer", buffer, size);

fprintf(fout"%s\n"buffer);//字符串末端加换行

fclose(fout);

return DEF_TRUE_1;

}

else

{

fclose(fout); 空指针不用释放 == 改为 == 》//fclose(fout);

return DEF_FAIL_1;

}

 

 

2.

sndfd = open(DEF_DEV_WAVEO_WRONLY);

if (sndfd < 0)

{

_printf("open %s fail"DEF_DEV_WAVE);

perror("\r\n open /dev/xx fail");

 

sndfd = open(DEF_DEV_WAVE_2416O_WRONLY);

if (sndfd < 0)

{

_printf("open %s fail"DEF_DEV_WAVE_2416);

perror("\r\n open /dev/xx fail");

fclose(fwave);

vPrtSmartDevModuleRunLog(__FUNCTION__, __LINE__, "exit() "NULL, 0, CardModuleLogCardModuleLogBak);

usleep(100 * 1000);

return;

}

}

fread(&fmt_chunk, 1, sizeof(struct Chunk_Header), fwave);

if (!strncmp(fmt_chunk.Chunk_ID"fmt ", 4))

{

/* this is a fmt chunk */

fread(&wavfmt, 1, sizeof(struct Wave_Format), fwave);

 

arg = wavfmt.BitsPerSample;

status = ioctl(sndfd, SOUND_PCM_WRITE_BITS, &arg);

if (status == -1)

perror("SOUND_PCM_WRITE_BITS ioctl failed");

if (arg != wavfmt.BitsPerSample)

perror("unable to set sample size");

 

_printf("BitsPerSample=0x%x  =  %d"wavfmt.BitsPerSamplewavfmt.BitsPerSample);

arg = wavfmt.NumChannels;

status = ioctl(sndfd, SOUND_PCM_WRITE_CHANNELS, &arg);

if (status == -1)

perror("SOUND_PCM_WRITE_CHANNELS ioctl failed");

if (arg != wavfmt.NumChannels)

perror("unable to set number of channels");

 

if (u1WaveNo >= DEF_WAVE_OTHER_START)

{

arg = wavfmt.SampleRate / 2;

}

else

{

arg = wavfmt.SampleRate / 1;

}

status = ioctl(sndfd, SOUND_PCM_WRITE_RATE, &arg);

if (status == -1)

perror("SOUND_PCM_WRITE_WRITE ioctl failed");

_printf("SampleRate=0x%x  =  %d \r\n", arg, arg);

/* skip extra bytes */

fseek(fwave, fmt_chunk.Chunk_Size - 16 + fmt_chunk.Chunk_Size % 2, SEEK_CUR);

}

else

{

_fprintf("Can't find fmt chunk.\n");

fclose(fwave);

== 改为 == 》close(sndfd);//忘记了释放,导致资源泄露

vPrtSmartDevModuleRunLog(__FUNCTION__, __LINE__, "exit() "NULL, 0, CardModuleLogCardModuleLogBak);

usleep(100 * 1000);

return;

}

 

 

 

3.

int getWavePath(unsigned char u1WaveNou8u1aWavePath)

{

switch (u1WaveNo)//播放哪一首歌曲

{

......

default:

memset(u1aWavePath, 0, sizeof(u1aWavePath)); == 改为 == 》*u1aWavePath = NULL;//原本的意思是要清空数组形式字符串的内容,但是形参传递的是指针,用memset清空的是sizeof大小4个字节的内容。

return -1;

break;

}

return 1;

}

 

 

 

4.

int _SZT_Init_Environment2(unsigned char cardsn[16])

{

int iIndex = POS_COMM_TEXT;

char RtnFlag = 0xee;

u16 CommandType = DEF_CMD_SZ_0X11_INIT_MTD;

 

{//send

unsigned char au1SendData[512];

int iSendDataNum = 0;

PackSendData(0, 0, 0, 0, 0, 0, RtnFlagCommandTypeau1SendDataiSendDataNumLOCAL_IP_ADDRESSCARD_READER_MODULE_PORTNO__);

 

}

 

{//receive

unsigned char au1PtrRecvBuff[1024];

int i4RecvLenMax = sizeof(au1PtrRecvBuff);

int iRetCode = UdpRecv(1, 0, g_i4CardReaderSocketFdau1PtrRecvBuffi4RecvLenMax);

if (iRetCode > 0)

{

unsigned char ptrNetRecvData[MAX_NET_DATA_LEN * 2];

iRetCode = getUdpPackData(au1PtrRecvBuff, 0, iRetCodeMAX_NET_DATA_LENptrNetRecvData);

if (iRetCode <= 0)

{

_printf("SZ getUdpPackData:failure! \r\n");

}

else

{

if (ptrNetRecvData[POS_COMMTYPE + 1] == CommandType)

{

if (ptrNetRecvData[iIndex++] == 0)

{

memcpy(cardsn, &ptrNetRecvData[iIndex], sizeof(cardsn)); == 错误 == 》sizeof(cardsn)的大小为sizeof指针的大小

iIndex += sizeof(cardsn); == 错误 == 》sizeof(cardsn)的大小为sizeof指针的大小

return 0;

}

else

{

return -1;

}

}

 

}

 

 

}

}

return -1;

}

 

 

5.

//插入数据到文件的开头

int insertFileDataHead(char *pFilechar *pCardDatau16 u2Lenchar cFlag)

{

{

if (access(pFileF_OK) != 0)  /*R_OK,W_OK,X_OK 和F_OK。R_OK,W_OK与X_OK用来检查文件是否具有读取、写入和执行的权限。F_OK则是用来判断该文件是否存在*/

{

PRERR("access(%s, F_OK) != 0"pFile);

return DEF_FAIL_1;

}

int fd = DEF_FAIL_1;

unsigned int size = 0, i = 0;

unsigned char buffer[1024 * 1024];//应该动态分配内存吧

//打开文件

fd = open(pFileO_RDONLY);

if (fd == DEF_FAIL_1)

{

PRERR("Cannot open %s"pFile);

return DEF_FAIL_1;

}

 

memcpy(&buffer[0], pCardDatau2Len & 0xff);

size = read(fd, &buffer[u2Len & 0xff], sizeof(buffer));

PR("%s:size=%d"pFilesize);

if ((size >= 0) && (size < (sizeof(buffer)-512)))

{

int offset = 0;

if (fseek(fdoffsetSEEK_SET) == -1)//移动到开头

{

_printf("GetUintFromFp:File FP Error!\r\n");

close(fd);

return DEF_FAIL_1;

}

else

{//写文件

//如果没有错误,则会返回实际读/写的字节数,如果有错误码,则会返回-1.

//记住一种情况,返回的实际读写数目可能跟你要读写的字节数不一致,这个是没有错的,返回0表示读写的字节为0.

u8 au1Tmp[128];

{//备份文件

snprintf(au1Tmpsizeof(au1Tmp), "cp -rf %s %s.bak"pFilepFile);

_system(au1Tmp);

}

size += u2Len;

int bytes_write = write(fdbuffersize);

/* 一个致命错误发生了 */

if ((bytes_write == -1) && (errno != EINTR))

{

close(fd);

return DEF_FAIL_1;

}

else if (bytes_write == size)//写完了所有读的字节

{

close(fd);

snprintf(au1Tmpsizeof(au1Tmp), "rm -rf %s.bak"pFile);

_system(au1Tmp);

return DEF_TRUE_1;

}

else if (bytes_write > 0)//只写了一部分,继续写

{

close(fd);

return DEF_FAIL_1;

}

 

}

}

<span style = "color:#000000;"> == 错误 == 》不能忘记关闭打开的文件

else

{

close(fd);

return DEF_FAIL_1;

}

}

}

 

 

 

6.

memcpy(&buffer[0], pCardDatau2Len & 0xff);

size = read(fd, &buffer[u2Len & 0xff], sizeof(buffer));

PR("%s:size=%d"pFilesize);

if ((size >= 0) && (size < (sizeof(buffer)-512)))

{

int offset = 0;

if (fseek(fdoffsetSEEK_SET) == -1)//移动到开头

{

_printf("GetUintFromFp:File FP Error!\r\n");

== 改为 == 》close(fd);//忘记了释放,导致资源泄露

return DEF_FAIL_1;

}

 

 

 


0 0
原创粉丝点击