dauphin28
bonjour a tous,
si quelqu'un peut m'aider?
mon pb est : je veux afficher un emacs depuis mon programme C, j'utilise execve mais au niveau de l'execution j'ai le message suivant :
Please set environment variable TERM; see tset(1).
j'ai bidoue dans le fichier /etc/termcap mais ca ne marche pas.
Merci de m'aider
cybervirem
Hi,
pourquoi execve ? tu veux récupérer quoi à la sorite ?
Cordialement
dauphin28
je veux lancer un emacs pour lire un ficher ou j'ai mis les resultats de mes tests.
cybervirem
Hi,
c'est quoi, une usine à gaz que tu concoctes ?
pour lire un fichier, on ne lance pas un éditeur, qui plus est emacs !
mais bon...
oriente toi vers system(char *cmd);
tu construis ton char *commande et tu fais system(commande); et ça revient tout seul !
Cordialement
dauphin28
mais c'est le client qui veut que ca soit comme ca.
cybervirem
bien conseillé, l'client... 😉
nouvo09
.
essaie a la fin de ton .bashrc d'ajouter: export TERM=ansi
a+
cybervirem
execve prend l'environnement existant... donc TERM=xterm !
dauphin28
oui mais ca ne marche pas.
Merci
cybervirem
@dauphin28: c'était pas pour toi !
bon,t'en sors-tu avec system ?
cybervirem
...
effectivement, execve ne gobe pas le term même s'il figure dans l'environnement...
Ajout : connerie, j'avais mal vu... je préfère ça !!!-)
Sat
Euh, on pourrait avoir le bout de code incriminé ? Tu récupéres comment les variables d'environnements ?
Parce que ce code-là marche sans soucis ....
int main(int argc, char **argv, char **envp)
{
execve("/usr/bin/emacs", argv, envp);
return 0;
}
cybervirem
@Sat:oui,oui, c'est ce que j'étais entrain de tester... no problème
mais si débuts en C system est plus simple...
Cordialement
dauphin28
oui ce bout de code marche et c'est le meme que j'ai mis
int main(int argc, char **argv, char **envp)
{
execve("/usr/bin/emacs", argv, envp);
return 0;
}
sous mandrake pour moi ca marche
mais sous fedora j'ai le message
Please set environment variable TERM; see tset(1).
et si ca peut t'aider j'ai mis
int valExc=execve("/usr/bin/emacs", argv, envp);
printf("la valeur d'excve %d\n",valExc);
printf("appelle d'excve a echoué: %s\n",strerror(errno));
donc s'il y a une erreur je l'aurais vu apparaitre a l'ecran
donc le pb est du a la variable environement TERM
la solution ???
Merci
Anvil
Je ne vois aucun interet a lancer emacs. Tu devrais lire le fichier sur n'importe quel FILE* ou file descriptor, ou je ne sais quoi. Si tu veux pouvoir lancer emacs, il va te falloir recoder un terminal, ou en repomper un. T'es dans une grosse galere si tu veux persister.
cybervirem
C'est clair... une grosse grosse galère ! Mais bon, c'est l'client qui veut 😉))))))) Comme ça il pourra dire, c'est pas moi, c'est le programme qu'a modifié les données...
Comment vas-tu assurer l'intégrité de tes données ?
Sous fédora, ce code marche parfaitement, avec tout ce que tu veux, y compris en bouclant sur *envp pour avoir toutes les variables d'environnement...
Quel est ton contexte d'exécution ? As-tu bien TERM=xterm quand tu telogues ?
Cordialement
cybervirem
...
post ta façon de compiler el les options