utilisation de dup2 - C - Programmation
Marsh Posté le 02-11-2007 à 14:38:35
Pour le retour à -1 de open() :
RETURN VALUES |
Utilise donc la variable globale errno pour savoir ce qui ne va pas (avec la fonction perror() par ex.), lorsque open() retourne -1, pour mieux voir ce qu'il se passe.
C'est sans doute un problème de droits, ou de *out mal initialisé.
Marsh Posté le 02-11-2007 à 15:08:56
déjà que ton code est pas compilable, j'ai des doutes sur le fait que tu testes bien le retour de tes open
Marsh Posté le 02-11-2007 à 15:11:56
pas compilable normal g juste recopier le principal qui ne marche pas que j ai teste avec le debugger ddd. le debugger me donne com valeur de desc1=6,desc2=-1,dup2=-1..........dc oui je connai les retour de mes open
Marsh Posté le 02-11-2007 à 15:18:48
je rajoute des indication peut etre
je fais un minishell
argv contient une liste de commande
argv[0] contien le fichier d entrer qui est aussi in
argv[1] contien > ou <
argv[2]contien le fichier de sortie qui est aussi out
Marsh Posté le 02-11-2007 à 15:20:08
On s'en moque de argv[], cet argument n'est pas utilisé dans la fonction.
Marsh Posté le 02-11-2007 à 15:21:23
si car j'ai pas tout mis dans le sujet car si argv[1][0]=='<' je fais une redirection differente que si c '>'
donc ya juste une condition de if que j'ai pas mi pour pas surcharger
Marsh Posté le 02-11-2007 à 15:30:50
Et argv, c'est celui du main() ?
Si oui, alors argv[0] ce n'est pas le fichier d'entrée, sauf si tu veux lire ton propre binaire...
Marsh Posté le 02-11-2007 à 15:33:31
non argv [0] ce n'est pas celui du main lol.... je c que ds le main argv[0]c l executable quand j 'appelle la fonction redirection c'est:
redirection (tab,in,out) oùin est le pointeur sur le fichier d 'entre et out sur le fichier de sortie et ou tab est du type char*tab[] et contien la lgne de commande que je renre dans mon mini--shell
Marsh Posté le 03-11-2007 à 10:55:56
voila ou j'en suis d'apres quelques aides....
si quelqu'un pouvait encore m'aider..... je sens que j'y suis presque
int desc1,desc2,desc3;
desc1=open(in,O_RDONLY);
desc2=open(out,O_WRONLY | O_CREAT);
desc3=dup2(desc1,STDOUT_FILENO);
close(desc1);
desc3=dup2(desc2,STDOUT_FILENO);
je rappele que je dois juste faire un mini-shell en faisan la gestion dezs redirections vers des fichiers en entre < et en sortie >;
tout ce que je fais la c'est dans le cas ou en ligne de commande on tape par exemple:entrée > sortie;
merci beaucoup pour votre aide.. j'y suis presque
Marsh Posté le 02-11-2007 à 14:34:59
voila bjr a ts,
je doi finir en tp en L3 info mais je galere on m demande de faire un mini shell et de faire les redirection dc avec une fnction redirection.....
int redirection (char *argv[], char * in,char * out)
{
int desc1, desc2;
desc1=open ( in, O_RDONLY);
desc2=open( out, O_WRONLY | O_CREAT | O_APPEND);
dup2(desc2,desc1);
return 0;
}
mais malheureusement ca marche pas du tout,
deja g desc2 qui prend la valeur -1 donc une erreur et donc g essaye de creer le fichier avec creat.... mais ca marche toujours pas car dup2 ne change pas la valeur de desc2... voila merci a tout ceuxx qui vont lire
Message édité par hutch13015 le 02-11-2007 à 15:13:55