Bonjour à toutes et à tous,
Je développe actuellement une application C# dans laquelle j'exécute un programme "serveur" codé en C/C++.
Je rencontre un problème assez étrange selon moi, dans le fichier C, j'ai créer une fonction "AddLog", qui permet entre autres d'écrire dans un fichier log.
Jusqu'ici tout va bien l'ennui c'est qu'à partir d'un moment donné dans mon programme, les logs ne s'écrivent plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 FILE *fichier = NULL; va_list ap; va_start(ap, log); fichier = fopen("log.log","a"); 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); }
Ce que je n'explique pas c'est que tous les AddLogs précédents le AddLog("Received connection from...") s'écrivent correctement dans mon fichier log.log, et que tous ceux à partir de ce dernier, ne s'écrivent pas car "Error 13 : Permission denied". Or, je sais que mon fichier à tous les privilèges (je m'en suis assuré en le mettant sur une machine linux et en faisant un chmod 777 dessus). De plus, quand j'exécute directement l'exécutable serveur je ne rencontre pas ce problème c'est uniquement quand je lance l'exécutable à partir de mon application C# que les logs à partir du AddLog("Received connection from...") buguent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 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));
J'espère avoir été assez clair, n'hésitez pas à demander plus d'informations dans le cas contraire.
Merci et bonne journée à tous
Partager