IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

"Permission denied" durant ecriture fichier log


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Juin 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 29
    Par défaut "Permission denied" durant ecriture fichier log
    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.

    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);    
    }
    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
    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));
    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.

    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

  2. #2
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    As-tu essayé de faire tourner le programme en root:root pour voir si l'erreur revient ?
    Ou pourrais-tu créer un /home pour le user qui fait tourner le programme, et lui dire d'écrire dedans avec des droits "classiques" pour voir si ça le fait encore.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Quand je vois cela : "ThreadData" je me dis que c'est du multi thread.

    "Error 13 : Permission denied", c'est peut être pas un problème de droit mais un problème d'accès concurrent. Le fichier est peut être déjà ouvert par un autre thread et pas encore refermé.

    Peut être qu'il faudrait mettre une section critique dans ta fonction AddLog().
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Haha, je n'ai même pas vu le ThreadData...

    Je plussoie grandement ram_000 !
    Un peu de mutex serait bien pour voir !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  5. #5
    Membre actif
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Juin 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 29
    Par défaut
    Rebonjour,

    Tout d'abord merci pour vos réponses!
    En effet c'est bien un problème de conflit d'écriture apparemment.
    J'ai rajouté des sections critiques dans ma fonction mais à la place des permission denied ca plante complétement(je le rappel, je lance mon programme depuis une application GUI C#).
    Ce qui me préoccupe on va dire surtout, c'est que si j'exécute directement le programme en double cliquant dessus, sur l'exécutable, je n'ai absolument aucun problème de Permission denied et tous les logs apparaissent dans le fichier.
    Il n'y a que lorsque j'exécute le programme depuis mon GUI que j'ai des soucis à ce niveau la.

    J'ai fais un simple test d'écriture d'un des logs qui posent problème AddLog("waiting connection ...") dans un autre fichier (ca pas de soucis) puis j'ai essayé de copier ce fichier vers le fichier log.log classique et pareil je me mange un permission denied!

    Si vous avez d'autres idées honnetement je suis preneur car la je vois pas..

    Merci encore

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Es-tu sûr que le programme C# est bon?

  7. #7
    Membre actif
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Juin 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 29
    Par défaut
    Le programme C# est assez simple, y a un bouton start qui lorsqu'on appuie dessus lance l'exécutable C à l'aide d'un Process.start() et ne va faire que lire et afficher les données du fichier "log.log" toutes les secondes, fichier dans lequel l'exécutable écrit jusqu'à un certain moment puis n'écrit plus car Permission denied voila tout.
    Donc je pense vraiment pas que le problème vienne du prog C#

Discussions similaires

  1. [Python 2.X] [Errno 13] Permission denied copie d'un fichier
    Par nekcorp dans le forum Général Python
    Réponses: 3
    Dernier message: 24/11/2014, 14h56
  2. [BufferedWriter] Ecriture fichier de log sous AIX
    Par kij dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 21/09/2007, 15h11
  3. modifier fichier permission denied
    Par fara morgana dans le forum Langage
    Réponses: 12
    Dernier message: 14/06/2006, 14h32
  4. Réponses: 19
    Dernier message: 15/05/2006, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo