Argh ! ça me met en rogne !
--- nioubie met un ban sur *!*@*.be
--- Vous avez été kické de #linuxfr par nioubie (change de pays)
--- Ne peut rejoindre #linuxfr (Vous êtes banni).
Vraiment n'importe quoi...
Du coup me voilà obligé de polluer ici :
Je suis callé sur une connerie en C ! (mais vraiment une connerie).
J'ai un programme C. J'aimerais qu'un second programme C se forke et se transforme dans le premier avec un execve.
Je fais ça comment ? (contrainte, je peux pas modifier le premier programme)
Et comment je passe les paramètres à premier.c ?
(je fouille tous mes manuels et je trouve rien à ce sujet ! ça doit être tellement con que personne ne le note, et j'ai oublié... snif..)
# Re: besoin d'aide toute conne pour programmer en C
Posté par Epsos . Évalué à 2.
prog2 :
Si tu veux pas te faire chier avec env, utilise plutot execv
RTFM comme on dit !
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 0.
Mon erreur : j'appelais le premier programme comme une foncition !
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 0.
Je pige pas.. il exécute pas le "premier". J'ai pourtant essayé avec ou sans guillemets, avec ou sans un ./ avant, je pige pas...
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 0.
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 0.
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Epsos . Évalué à 2.
Il doit y avoir une fonction C qui te recupere le path absolu a partir d'un path relatif. Cherche un peu.
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par daggett . Évalué à 2.
Un conseil aussi: apres ton execve, fais un perror("ca a foiré") t'auras le message d'erreur un peu plus explicite :)
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 1.
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Pierre Tramo . Évalué à 4.
> EFAULT L'argument fichier pointe en dehors de l'espace d'adressage
> accessible.
Chez moi ça marche très bien avc un chemin relatif et './'. Tu es sûr de tous tes paramètres ( commande, arguments et environnement ) ? Sinon, tu n'aurais pas une kenelle un peu exotique ?
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Obsidian . Évalué à 1.
peut-être ?
Mais le plus propre serait d'ajouter "./" au début du nom de ton fichier.
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 0.
que ce soit avec le path absolu ou le path relatif, ou même sur une machine ou le répertoire courant est dans le path, e bien CA MARCHE PAS !
En fait, voilà le problème :
il me met comme erreur "Bad adress" et non "no such file or directory" !
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par durandal . Évalué à 2.
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Obsidian . Évalué à 1.
Lis la man page de execve, il parle de l'argument "fichier", mais à mon avis c'est le pointeur env qui est initialisé à zéro qui ne lui plaît pas. Suis mon exemple ci-dessous ou celui de Christophe GRAND, et dis-nous si ça marche.
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 2.
Maintenant, il reste des problèmes car il considère le premier paramètre passé comme nul (alors qu'il devrait pas l'être)
En fait, le programme "premier" fait un simple open(argv[1])
J'ai l'impression que ça rentre en conflit avec l'autre argv !
Merci,
Quand j'ai finis ça, j'offre une tournée générale de + ! :)
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Obsidian . Évalué à 1.
Essaie d'utiliser juste "argv" ou alors de lancer le programme tel quel mais en passant un argument dans ta ligne de commande (qui correspondrait par exemple au nom que tu voudrais donner à l'autre programme :-) ).
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 1.
execv("filtre", argv+(i+1));
ou i est incrémenté dans une boucle while
Ce qui est bizarre, c'est qu'en lançant :
"premier_prog arg1 arg 2"
c'est sensé lancé un : "second_prog arg1" et un "second_prog arg2".
Or, il fait en fait un "secnd_prog null" et un second_prog arg2"
Tous les arguments après le premier marchent donc normalement !
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Obsidian . Évalué à 7.
/* Programme qui lance plein d'applications */
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
int main (int argc,char **argv)
{
if (argc>1)
{
int i;
int r;
char * param [3];
param [0] = argv[0];
param [2] = NULL;
for (i=1;i<argc;i++)
{
r=fork();
if (!r)
{
param [1] = argv [i];
if (execve("./programme",param,environ)<0) perror ("Erreur sur execve");
}
else if (r<0) perror ("erreur sur fork()");
}
}
else fprintf (stderr,"Merci de spécifier des arguments");
return 0;
}
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 2.
Je reviens te plusser demain, j'ai plus de vote aujourd'hui ! En tout cas, grandiose !
Merci.. J'avais en effet une grave erreur de compréhension de ma part.
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Obsidian . Évalué à 2.
Et ce ne sera pas la dernière, loin de là ! Mais c'est comme ça que l'on finit par devenir guru ! :-)
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Obsidian . Évalué à 1.
bouge donc le param[1]=argv[i] au dessus du fork(). Comme ca, ca évite la modification de variables dans le processus fils et donc la duplication des pages de RAM (surtout si elles sont destinées à être écrasées par le execve() ).
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 1.
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Obsidian . Évalué à 3.
int result = execve("monpremier programme", argv + 1, env);
#include <unistd.h>
int result = execve("monpremier programme", argv + 1, environ);
Comme ça, tu transmets les variables d'environnement.
(void man environ).
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Christophe GRAND (site web personnel) . Évalué à 3.
int main(int argc, char *argv[], char *envp[])
{
...
int result = execve("monpremier programme", argv + 1, envp);
...
}
# Re: besoin d'aide toute conne pour programmer en C
Posté par titi toto . Évalué à 5.
pas tres malin ca de bannir tous les belges :-\
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Obsidian . Évalué à 7.
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Emmanuel Blindauer (site web personnel) . Évalué à -7.
on a aussi cessé d'etre tolérant face aux gens qui croient que l'aide gratuite leur est dû.
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Gniarf . Évalué à 0.
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par ploum (site web personnel, Mastodon) . Évalué à 4.
C clair que votre tolérance a de sérieuses limites ! Malheureusement, je vois que votre débilité n'a pas cette chance !
Mes livres CC By-SA : https://ploum.net/livres.html
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par soda . Évalué à 6.
#linuxfr est tout sauf un canal de discussion linux... Vous devriez changer pour #bistrot. J'ai encore jamais vu personne filer le moindre coup de main à un newbie sur ce fichu canal. Les fortunes sont, pour beaucoup, du foutage de gueule de débutant. C'est parfois drôle... mais c'est souvent pitoyable tant l'ambulance est criblée. Pour mémoire, le 8e dan a forcément été ceinture blanche un jour.
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 1.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par shelton2 (site web personnel) . Évalué à 2.
[^] # Re: besoin d'aide toute conne pour programmer en C
Posté par Emmanuel Blindauer (site web personnel) . Évalué à 1.
# Re: besoin d'aide toute conne pour programmer en C
Posté par Ramso . Évalué à 5.
y'a un équivalent au RTFM mais qui veut dire « lis la constitution, il est interdit de s'en prendre à quelqu'un sur la base de ses origines » ?
les cons, s'il suffisait de les ignorer...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.