Exec en langage C/C++

Résolu/Fermé
sandrine.m Messages postés 3 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 23 décembre 2009 - 23 déc. 2009 à 02:02
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 24 déc. 2009 à 16:29
Bonjour à tous!

alors voilà... Je programme en C++ sous linux et je veux faire un execlp afin de lancer la commande dot de graphviz à partir de mon programme. Cependant j'ai une erreur que je n'arrive pas à résoudre...
voici mon erreur :
"terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct NULL not valid
Abandon"

Je ne comprends pas ou est mon erreur... j'ai essayé en précisant le chemin de ma commande dot : usr/bin/dot dans le premier argument de execlp mais ça n'a pas marché.

voici mon code :
int main(int argc, char*argv[])
{
    vector<Sommet>v;
    string s;
    v=remplissage(argv[1]);// remplissage d'une structure de données permettant de stocker un graph
    affichage(v);
    s=creation_dot(argv[1],v);// creation du fichier .dot associé
    // Creation du .png
    string pt;
    int loc;
    pt=argv[1];
    //creation du nouveau nom de fichier
    loc=pt.find(".txt",0);
    pt.erase(loc);
    pt.push_back('.');
    pt.push_back('p');
    pt.push_back('n');
    pt.push_back('g');
    //
    if(fork()==0)
    {
     execlp("dot","dot","-Tpng","graph.dot","-o","graph.png",NULL);
    }
}


merci pour votre aide et passez tous de bonnes fêtes

sandrine
A voir également:

5 réponses

sandrine.m Messages postés 3 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 23 décembre 2009 1
23 déc. 2009 à 13:56
ça y est... j'ai trouvé... ce n'était pas du tout dans le execlp que ça n'allait pas en fait.... mais dans un de mes fonctions qui devait renvoyer un string et renvoyait un int.... :$ enfin.... le execlp renvoie un int que j'ai stocké dans un variable.

voilou!

merci en tout cas
1
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
23 déc. 2009 à 02:04
Je ne sais pas si c'est la commande execlp mais personnellement j'utilise plutôt popen ou execve ou execvp...

Bonne chance
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
23 déc. 2009 à 02:07
Personnellement j'utilise plutôt execve, execvp ou popen.
À mon avis c'est l'argument NULL qui fait planter ton execlp, cette fonction ne s'utilise pas comme execvp ou execv. Tous les détails ici :
http://www.linux-kheops.com/doc/man/manfr/man-ascii-0.9/man3/execvp.3.txt.html

Bonne chance
0
sandrine.m Messages postés 3 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 23 décembre 2009 1
23 déc. 2009 à 13:39
merci! c'est gentil d'avoir répondu.
Avec execlp, j'ai toujours mis un NULL comme dernier argument. d'ailleurs si je ne le met pas il me demande "la sentinnelle". sus le man que tu m'a envoyé, il y a noté :
Les arguments const char *arg ainsi que les points de sus­
       pension des fonctions execl,  execlp,  et  execle  peuvent
       être  vues  comme des arg0, arg1, ..., argn.  Ensemble ils
       décrivent une liste d'un ou plusieurs  pointeurs  sur  des
       chaînes  de  caractères terminées par des caractères nuls,
       qui constituent les arguments  disponibles  pour  le  pro­
       gramme  à  exécuter.   Par  convention le premier argument
       doit pointer sur le nom du fichier associé au programme  à
       exécuter.  La  liste des arguments doit se terminer par un
       pointeur NULL.


Je ne pense pas que le problème vienne de là... j'ai essayé avec execvp, execve comme conseillé mais ça ne fonctionne pas... apparemment ce qui n'irait pas serait le type de mes arguments...

merci encore!

sandrine
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
24 déc. 2009 à 16:29
Ah parfait, merci pour ces précisions, et bonne continuation !
0