Langage C : Sortie et entrée
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Langage C : Sortie et entrée



  1. #1
    invite0538e403

    Langage C : Sortie et entrée


    ------

    Bonsoir,

    Je bloque sur une question, vous pourriez peut être m'aider, la voici :

    Question :

    Ecrire un programme qui redirige la sortie standard vers un fichier, puis effectue un "ls" vers ce fichier.

    Donc dans le fichier de sortie que je nomme test.txt je devrait avoir le resultat de la commande "ls" si j'ai bien compris.

    Ma réponse ( qui ne marche pas aie aie aie ! )

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>

    int main (int argc, const char * argv[])
    { // OBJECTIFS : ls > test.txt;
    int test;

    //DESCRIPTEURS
    test = open("test", O_WRONLY|O_TRUNC|O_CREAT|S_IRU SR|S_IRGRP|S_IWGRP|S_IWUSR);//
    Conditions pour eviter le rejet par exemple si le fichier existe pas, le crée.
    //REDIRECTION VERS LE FICHIER TEST
    dup2(test,1);

    execvp("ls");
    }

    Je vous remercie pour vos aides par avance !

    -----

  2. #2
    invite0538e403

    Re : Langage C : Sortie et entrée

    Ceci marche, il y a bien la création du fichier out.txt, mais il est vide :'( c'est à dire que le resultat de la commande ls n'est pas dedans ...

    Code:
    int main (int argc, const char * argv[])
    {	// OBJECTIFS :	ls > out.txt;
     	int out;
     	
     	//DESCRIPTEURS
     	out = open("out.txt", O_WRONLY|O_TRUNC|O_CREAT|S_IRUSR|S_IRGRP|S_IWGRP|S_IWUSR);// Conditions pour eviter le rejet par exemple si le fichier existe pas, le crée.
     	//REDIRECTION VERS LE FICHIER  TEST
     	dup2(out,1);
     	execvp("ls", NULL);
    	return 1;
     	
    }
    Dernière modification par JPL ; 20/12/2012 à 14h49. Motif: Ajout de la balise Code (#) pour garder l'indentation

  3. #3
    Chanur

    Re : Langage C : Sortie et entrée

    Bonjour.

    Ta méthode est bonne, mais la syntaxe de "execvp" est mauvaise : le deuxième argument doit pointer vers une liste d'arguments à passer au programme à exécuter. Le premier argument étant le nom du programme. donc "ls" n'est pas exécuté.
    la liste devrait ressembler à ça :
    char * arg [2] = { "ls", NULL };

    Tu aurais du mettre un affichage d'erreur après l'appel à execvp : elle ne retourne qu'en cas d'erreur.

    D'autre part, il manque le troisième argument à open, pour préciser le mode du fichier, qui actuellement est aléatoire.

    au final :
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <string.h>
    
    
    int main (int argc, const char * argv[])
    {    // OBJECTIFS :    ls > out.txt;
         int out;
         char * arg[2] = { "ls", NULL };
         
         //DESCRIPTEURS
         out = open("out.txt", O_WRONLY|O_TRUNC|O_CREAT, 0666);// Conditions pour eviter le rejet par exemple si le fichier existe pas, le crée.
         //REDIRECTION VERS LE FICHIER  TEST
         dup2(out,1);
         execvp("ls", arg);
         printf ("erreur %d : %s\n", errno, strerror (errno));
         return 1;
    }
    Dernière modification par Chanur ; 20/12/2012 à 22h11.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

Discussions similaires

  1. Entrée sortie en c
    Par invitee7abb03f dans le forum Électronique
    Réponses: 1
    Dernier message: 21/04/2012, 14h25
  2. Entrée ou sortie de l'atmosphère?
    Par créaventeur dans le forum Astronautique
    Réponses: 44
    Dernier message: 13/11/2010, 23h51
  3. entrée et sortie de l'atmosphere
    Par invite765ebf8d dans le forum Astronautique
    Réponses: 32
    Dernier message: 30/04/2009, 15h38
  4. PWM_ Entrée/Sortie
    Par ABN84 dans le forum Électronique
    Réponses: 6
    Dernier message: 05/05/2007, 21h26
  5. Entree/sortie Dv Grillee?..
    Par invite95882a62 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 17/02/2006, 10h12