Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1514 connectés 

  FORUM HardWare.fr
  Programmation
  C

  utilisation de dup2

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

utilisation de dup2

n°1635550
hutch13015
Posté le 02-11-2007 à 14:34:59  profilanswer
 

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
mood
Publicité
Posté le 02-11-2007 à 14:34:59  profilanswer
 

n°1635551
Elmoricq
Modérateur
Posté le 02-11-2007 à 14:38:35  profilanswer
 

Pour le retour à -1 de open() :

RETURN VALUES
     Upon successful completion, the open()  function  opens  the
     file  and  return  a  non-negative  integer representing the
     lowest numbered unused file  descriptor.  Otherwise,  -1  is
     returned,  errno  is set to indicate the error, and no files
     are created or modified.

 

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é.


Message édité par Elmoricq le 02-11-2007 à 14:39:15
n°1635553
hutch13015
Posté le 02-11-2007 à 14:50:15  profilanswer
 

errno vaut 0 apres le desc2 et apres le dup2 snif  

n°1635564
Taz
bisounours-codeur
Posté le 02-11-2007 à 15:08:56  profilanswer
 

déjà que ton code est pas compilable, j'ai des doutes sur le fait que tu testes bien le retour de tes open

n°1635569
hutch13015
Posté le 02-11-2007 à 15:11:56  profilanswer
 

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

n°1635572
hutch13015
Posté le 02-11-2007 à 15:18:48  profilanswer
 

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

n°1635573
Elmoricq
Modérateur
Posté le 02-11-2007 à 15:20:08  profilanswer
 

On s'en moque de argv[], cet argument n'est pas utilisé dans la fonction.

n°1635574
hutch13015
Posté le 02-11-2007 à 15:21:23  profilanswer
 

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


Message édité par hutch13015 le 02-11-2007 à 15:21:49
n°1635578
Elmoricq
Modérateur
Posté le 02-11-2007 à 15:30:50  profilanswer
 

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...

n°1635579
hutch13015
Posté le 02-11-2007 à 15:33:31  profilanswer
 

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

mood
Publicité
Posté le 02-11-2007 à 15:33:31  profilanswer
 

n°1635951
hutch13015
Posté le 03-11-2007 à 09:25:40  profilanswer
 

snif pas d'aie possible?????????

n°1635986
hutch13015
Posté le 03-11-2007 à 10:55:56  profilanswer
 

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


Message édité par hutch13015 le 03-11-2007 à 11:18:02

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  utilisation de dup2

 

Sujets relatifs
[RESOLU][D 7] utilisation de try...except...endUtilisation du Solver en VBA
de l'utilisation de pod2usage ?[PHP et phpToPDF] utilisation de Cell
sessions: test si identifiant de connexion dejà en cours d'utilisation[HTA/VBS] Utilisation d'un vbs externe et modification d'un champ
Aide sur l'utilisation de prototype[résolu] Utilisation de List dans "Yet Another Haskell Tutorial"
Utilisation de deux versions de drivers différents (8i & 9i)Utilisation des web services avec Visual Studio 2008 (.NET frwk 3.5)
Plus de sujets relatifs à : utilisation de dup2


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR