当前位置: 技术问答>linux和unix
多线程写文件,写不进去
来源: 互联网 发布时间:2017-04-21
本文导语: 下面的代码,我在主进程中,可以写入log, 但是我放到多线成中,只有第一次启动程序的时候,log才会被写入,然后就不能写入了,只有重启,也是只有1次可以写入。 难道多线程对这个有控制吗?还是我遗漏了什...
下面的代码,我在主进程中,可以写入log,
但是我放到多线成中,只有第一次启动程序的时候,log才会被写入,然后就不能写入了,只有重启,也是只有1次可以写入。
难道多线程对这个有控制吗?还是我遗漏了什么?
我 试验过加互斥量问题依旧有
但是我放到多线成中,只有第一次启动程序的时候,log才会被写入,然后就不能写入了,只有重启,也是只有1次可以写入。
难道多线程对这个有控制吗?还是我遗漏了什么?
我 试验过加互斥量问题依旧有
static int LogPrint(char *pcStrData)
{
char acDate[16];
char acLogName[30];
char acLogPath[100];
char acLogPathName[120];
FILE *pFd;
GetUTC(acDate);
/* log文件名字 */
//strncpy(cLogName, cDate, 10);/* 取年月日小时为文件名 */
//strncpy(acLogName, acDate, 14);/* 取年月日小时分秒为文件名 */
strncpy(acLogName, acDate, 8);/* 取年月日小时为文件名 */
acLogName[8] = '';
strcat(acLogName, ".log");
/* 获取路径 */
getcwd(acLogPath, sizeof(acLogPath));
/* 获得完整路径 */
sprintf(acLogPathName, "%s/log/", acLogPath);
/* 创建文件夹 */
mkdir(acLogPathName, 0777);
strcat(acLogPathName, acLogName);
pFd = fopen(acLogPathName, "a+");
if (pFd == NULL)
{
DBG_PRINT("can not create log file:%s n", acLogPathName);
return -1;
}
GetUTC(acDate);
fwrite(acDate, 14, 1, pFd);/* 年月日时分秒 */
fwrite(" ", 1, 1, pFd);
fwrite(pcStrData, strlen(pcStrData), 1, pFd);
fclose(pFd);
//fwrite("n", 1, 1, pFd);
return strlen(pcStrData) + 14 + 1;
}
|
读写文件和线程没什么关系,报什么错?是不是没有同步程序就退出了?fsync()试试