我的C/C++編寫日誌文件時遇到問題。 下面的代碼的一個例子發生問題嘗試寫入日誌文件時拒絕權限
EnterCriticalSection(&critical);
printf("\nWaiting for a connection on TCP port %d (nbr of current threads = %d)...\n", pServer->TCPServerPort, (*pServer->lChildInfo));
AddLog("Waiting for a connection on TCP port %d (nbr of current threads = %d)...", pServer->TCPServerPort, (*pServer->lChildInfo));
LeaveCriticalSection(&critical);
// creating variables to be passed to the thread
struct*ThreadData = (struct*) malloc(sizeof(struct));
ThreadData->csock = (int*)malloc(sizeof(int));
memcpy(&ThreadData->pServer,&pServer,sizeof(pServer));
if((*ThreadData->csock = accept(pServer->ListenSocket, (SOCKADDR*)&sadr, &addr_size))!= INVALID_SOCKET){
ThreadData->dwIP = sadr.sin_addr.s_addr;
ThreadData->wPort = sadr.sin_port;
printf("Received connection from %s:%d \n",inet_ntoa(sadr.sin_addr), ntohs(sadr.sin_port));
AddLog("Received connection from %s:%d ",inet_ntoa(sadr.sin_addr), ntohs(sadr.sin_port));
AddLog是我爲了寫到文件寫的函數:
FILE *fichier = NULL;
va_list ap;
va_start(ap, log);
//fichier = fopen("log.log","a");
fichier = _fsopen("log.log", "a", SH_DENYNO);
if (fichier == NULL)
printf("Error log: %d (%s)\n", errno, strerror(errno));
else {
fprintf(fichier,":");
vfprintf(fichier, log, ap);
fprintf(fichier,"\n");
va_end(ap);
fclose(fichier);
}
我真的不能解釋的是,第一AddLog(「等待......」以及之前的所有文件)被正確寫入文件。但是,當我嘗試一個連接,日誌來(然後接收連接...)沒有寫入文件,我總是得到錯誤13「權限被拒絕」。 我使用chmod 777進入該文件,我也試過_fsopen函數,一旦進入線程,我仍然會得到這個錯誤。 如果有人有任何想法,這將是reaaally有幫助。 感謝所有
向我們展示完整的示例程序,它可能有助於找到問題。 – user205993
由於您的初始'AddLog()'調用由關鍵部分保護,我懷疑所有其他實例也應該如此。不知道這是否是你的問題,但它是* a *問題。另外,您可能應該將'va_start()'移動到'else'子句中的'AddLog()'內,否則匹配的'va_end()'可能永遠不會被調用 - 不管這個問題可能依賴於實現而已... – twalberg