日期:2014-05-16  浏览次数:20672 次

多线程写文件,写不进去
下面的代码,我在主进程中,可以写入log,

但是我放到多线成中,只有第一次启动程序的时候,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] = '\0';
    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()试试