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 :

Problème sous Unix


Sujet :

C

  1. #1
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut Problème sous Unix
    Bonsoir à vous,

    Voilà je m'explique, lors de la compilation avec mon makefile. L'erreur suivante se produit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "Fichier.ini", line 20: warning: old-style declaration or incorrect type for: NOEUD
    "Fichier.ini", line 20: syntax error before or at: Noeud
    "Fichier.ini", line 20: warning: old-style declaration or incorrect type for: Noeud
    "Fichier.ini", line 21: too many initializers for scalar
    Maintenant je vous explique en quoi consiste mon programme. Alors c'est assez simple (d'après mon prof ).
    Il s’agit de suivre l’évolution de petits robots dans un atelier.
    Un robot se déplaçant d’un point à un autre par le chemin le plus court.
    De plus, les allées sont trop étroites pour que 2 robots puissent se croiser. Donc si un robot se
    trouve dans une allée, aucun autre robot ne peut s’engager. Il doit donc attendre sur un
    carrefour que l’allée se libère.

    Pour cela on donne :
    - le programme Controle.c
    - le programme Robot.c
    - le programme Chemin.c
    - le fichier fichier.ini

    Controle.c :
    Ce programme
    - crée les ressources nécessaires à l’application, ( dans l’état actuel, la file de
    messages),
    - lance les exécutables (Chemin et Robot),
    - attend une demande de chemin de la part d’un robot
    - transmet au processus Chemin l’identificateur du Robot, les points de départ et
    d’arrivée.
    - attend une saisie suivante.

    Chemin.c :
    Ce programme reçoit de Controle le pid du processus Robot ainsi que les points de départ et
    d’arrivée.
    Il calcule le trajet le plus court entre les 2 points,( si c’est possible,) et le transmet au
    processus Robot.
    L’algorithme de recherche du chemin le plus court est donné.
    (Il ne s’agit pas de l’algorithme le plus performant, mais ce n’est pas le problème ici)

    Robot.c :
    Il lit dans un vecteur la destination, et demande le trajet suivant.
    Il reçoit le chemin à parcourir .
    Il attend 3 secondes, recommence avec la destination suivante.

    fichier.ini :
    C’est un fichier d’initialisation qui contient la description de l’atelier et les chemins possibles.
    Ce fichier sera modifié en fonction d’un nouvel atelier.
    Le schéma est donné dans le fichier.ini.

    Voilà ce que j'ai dans mon Fichier.ini
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    char       Atelier[][17] = 
        { "X+++X+++X   X   X",
          "+   +   +        ",
          "+   +   +        ",
          "+   +   +        ",
          "X   X+++X   X+++X",
          "+   +   +   +   +",
          "+   +   +   +   +",
          "+   +   +   +   +",
          "X+++X   X   X   X",
          "+   +   +   +   +",
          "+   +   +   +   +",
          "+   +   +   +   +",
          "X   X   X   X   X",
          "+   +   +   +   +",
          "+   +   +   +   +",
          "+   +   +   +   +",
          "X+++X+++X+++X+++X"
       };
    NOEUD Noeud[] =
        { {  0, { 0, 0, 0, 0}},
          {  0, { 2,11, 0, 0}},
          {  0, { 1,12, 3, 0}},
          {  0, { 2,13, 4, 0}},
          {  0, { 3,14, 5, 0}},
          {  0, { 4,15, 0, 0}},
          { -1, { 0, 0, 0, 0}},
          { -1, { 0, 0, 0, 0}},
          { -1, { 0, 0, 0, 0}},
          { -1, { 0, 0, 0, 0}},
          { -1, { 0, 0, 0, 0}},
          {  0, { 1,21,12, 0}},
          {  0, { 2,11,17, 0}},
          {  0, { 3,18, 0, 0}},
          {  0, { 4,19, 0, 0}},
          {  0, { 5,20, 0, 0}},
          { -1, { 0, 0, 0, 0}},
          {  0, {18,22,12, 0}},
          {  0, {17,23,13, 0}},
          {  0, {14,20, 0, 0}},
          {  0, {19,15, 0, 0}},
          {  0, {11,22, 0, 0}},
          {  0, {21,17,23, 0}},
          {  0, {22,18, 0, 0}},
          { -1, { 0, 0, 0, 0}},
          { -1, { 0, 0, 0, 0}},
          { -1, { 0, 0, 0, 0}},
       };
    On me demande pour commencer de charger le schémas de l'atelier dans une mémoire partagée. La mémoire partagée, je sais comment la créer. Le problème est que je ne sais pas comment placer le tableau se trouvant dans le fichier.ini dans ma mémoire partagée. Un camarade m'as dit qu'en incluant le "fichier.ini" dans mon code de "controle.c", l y aurait moyen que je fasse un memcpy du fichier dans ma mémoire. Pourtant lorsque j'inclu ce dernier dans mon code, il me fait un message d'erreur (cf début du post).

    Voilà alors ma question est simple, quelqu'un pourrait-il me dire comme je peux faire pour placer le contenu du fichier.ini dans la mémoire partagée? Sachant que le fichier.ini peut être modifié et n'aura peut-être plus les même dimensions que celui que l'on m'a donné au départ.

    Si jamais je trouve la solution, je vous le signalerais leplus rapidement possible, peut-être que ça vous interresse.


    p.s.:pour ceux qui veulent, je veux bien mettre tous les fichiers en pièces jointes. (sur demande bien évidement)
    p.s.1: je fait mon allocation de mémoire partagée avec les fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idMP = shmget(CMP, sizeof(MEMPART), IPC_CREAT|IPC_EXCL|0700);
    	pMP= (MEMPART*) shmat(idMP,0,0);
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Pour le fichier .ini tu peux le renommer en .h mais il te faudra alors ajouter la déclaration de la structure NOEUD.(C'est quoi un noeud ?) Tu n'as pas un fichier noeud.h ?

    Pour la mémoire partagée tu as ta variable de type pointeur (pMP) tu peux donc faire sur l'objet pointé pMP->x =10;pMP->y.z=20;....

    Pour te déplacer tu peux utiliser la notation pMP++ (attention aux débordements) ou pMP--.
    Garde bien en mémoire l'adresse que te renvoi shmat car c'est le début de ta zone partagé.

    Sinon petite question c'est quoi le point de départ du robot ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hegros
    Pour le fichier .ini tu peux le renommer en .h mais il te faudra
    .h pour des définitions d'objets ? On en a brûlé pour moins que ça...
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    .h pour des définitions d'objets ? On en a brûlé pour moins que ça...
    J'ai pas compris Me suis dis que pour un atelier un .h pourrait faire l'affaire pour commencer.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Points : 220
    Points
    220
    Par défaut
    l'erreur vient du fait que le type NOEUD n'est pas reconnu, ce qui est normal...

    je te conseille d'écrire les données d'initialisation en texte formaté et de les charger depuis ton programme en ouvrant le fichier .ini
    de cette facon t'auras pas a recompiler à chaque fois que tu devras faire une initialisation différente

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par coca25
    je te conseille d'écrire les données d'initialisation en texte formaté et de les charger depuis ton programme en ouvrant le fichier .ini
    de cette facon t'auras pas a recompiler à chaque fois que tu devras faire une initialisation différente
    Ah, voilà enfin la Bonne Méthode.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Merci à vous pour les conseils.

    Je vais essayer je verrais bien.

    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

Discussions similaires

  1. Problème de tri sous UNIX
    Par tom31 dans le forum Unix
    Réponses: 1
    Dernier message: 02/04/2009, 13h10
  2. Problème lenteur sous UNIX Silicon SGI (irix 6)
    Par nador38 dans le forum Autres systèmes
    Réponses: 0
    Dernier message: 28/11/2008, 10h58
  3. Problème de connexion au serveur sous unix..
    Par da3_insa dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 26/10/2008, 12h53
  4. Probléme d'installation d'oracle 10g.r2.64 sous unix RHEL5.64
    Par issamo1515 dans le forum Installation
    Réponses: 2
    Dernier message: 13/05/2008, 13h48
  5. [JavaMail] problème d'authentification sous Unix
    Par Michalak dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 10/12/2007, 08h44

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