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

Réseau C Discussion :

Problème chdir


Sujet :

Réseau C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Problème chdir
    Bonjour,

    je suis en train de travailler sur un code C sous Linux qui fonctionne ainsi :
    - Un serveur receptionne par socket des demandes de connections de clients (socket ethernet).
    - Lors de la connection d'un client, le serveur crée un fils (fork) qui va s'occuper du dialogue avec le client. Le serveur se remet immédiatement à l'ecoute d'eventuels autres connections de clients.

    Jusque là, tout va bien, il s'agit d'un système de serveur-client multi-utilisateur classique.

    Ensuite, chaque fils recoit de son client des données qu'il va stocker en local, dans un repertoire spécifique au client. (par exemple, le client 1 va envoyer des données que son fils va stocker dans le repertoire /donnee/1, le client 2 va envoyer des données que son fils va stocker dans le repertoire /donnee/2, etc....)
    Sur le code que j'avais, le fils fonctionnais ainsi :
    - création du repertoire x dans /donnee (x etant le numero du client)
    - deplacement dans le repertoire nouvellement créé ( chdir("/donnee/1/"); par exemple)
    - creation du fichier de reception dans le repertoire courant (donc toujours pour le meme exemple /donnee/1/)
    - reception des données et ecriture dans le fichier.

    Ce code fonctionne bien lorsqu'un seul client se connecte au serveur. Le problème survient lors de la connection simultanée de 2 ou plus clients. Le fils connecté au client 1 créé le repertoire /donnee/1/, le fichier de reception et commence la reception/ecriture des données. Un peu après, le fils connecté au client 2 réalise les memes operations, mais il semblerait qu'a partir du moment où il réalise son propre chdir (positionnement sur le repertoire /donnee/2), la copie des fichiers en provenance du client 1 soit coupée.
    Apres plusieurs heures de test et de debuggage, il semblerait que cela vienne effectivement au moment de l'utilisation de la fonction chdir mais je ne comprends pas POURQUOI cela fait planter la connection/copie des fichiers...

    Voila, désolé pour le roman mais j'ai essayé de bien retranscrire comment le programme fonctionnait et ce qu'il réalisait. J'ai essayé d'etre aussi clair que possible, je ne suis pas sûr d'y etre arrivé

    En vous remerciant d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Pourquoi es-tu obligé de faire un chdir pour copier tes données, tu ne peux pas créer le fichier avec un chemin absolu style "c:/donnees/1/monfic.dat"
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Effectivement, la premiere chose que j'ai faite en voyant ce code, c'est de faire sauter le chdir, et de créer et ecrire dans le fichier de reception avec une adresse absolue. Je suis donc passé de ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chdir("/donnee/2/");
    fich = open("fich","w");
    write(fich...);
    à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fich = open("/donnee/2/fich","w");
    write(fich....);
    ,ce qui est à la fois plus simple et plus logique.
    C'est d'ailleurs en faisant cette operation que je me suis rendu compte que le programme fonctionnait. J'en ai donc déduis que l'erreur venait du chdir, mais sans pour autant réussir à l'expliquer.
    Et comme j'aime bien comprendre tout les tenants et les aboutissants de ce que je code, ben j'essaye de comprendre pourquoi le chdir fout la pagaille.
    On est bien d'accord que l'utilisation du chdir ici est une MAUVAISE utilisation, mais c'est pourtant une utilisation VALIDE (dans le sens où le code fonctionne... du moins en mono utilisateur).
    J'essaye juste de comprendre (avec un peu d'aide ^^) pourquoi un code qui devrait marcher, ne fonctionne pas.

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par sterfield
    On est bien d'accord que l'utilisation du chdir ici est une MAUVAISE utilisation, mais c'est pourtant une utilisation VALIDE (dans le sens où le code fonctionne... du moins en mono utilisateur).
    Donc il ne fonctionne pas vraiment
    Peut-être des options de création du fils avec fork (je m'aventure en terrain totalement inconnu pour moi).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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