[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux-team] Probleme de redirection



Tony MASSE wrote:

>     Bonjour,
>
>     J'ai un probleme dans mon programme, cette ligne ne fonctionne pas :
>
>     execlp ("ps","ps","1>/home/err.txt","2>/home/msg.txt",0);
>
>     en fait, stdout et stderr ne sont pas redirigées.
>
>     et tout se passe bien à la compilation.
>

C'est normal, c'est le boulot du shell d'interpreter et de rediriger les
entrees et sorties.
Hors ici tu n'utilises aucun shell ! .. alors tu dois le faire toi meme

int std_out, std_in;

std_out=open("/home/msg.txt", "w");
close(1);  // maintenant le fd (file descriptor) 1 (stdout) est libre
dup(std_out); // dup duplic std_oud dans le 1er descripteur libre
close(std_out);  // msg.txt est accessible via le fd 1 et std_out, qui n'est
plus utile.

std_err=open("/home/err.txt", "w");
close(2);
dup(std_err);
close(std_err);

execlp ("ps","ps",0);

OU alors qlque chose comme :

execlp ("bash", "bash", "ps 1>/home/err.txt 2>/home/msg.txt",0);
ou ptetre /bin/bash faut essayer

>
>     Le but est de créer un processus fils qui execute independamment un
> programme, et qui recupère les erreurs potentiels.
>
>     C'est pour cela que je redirige stdout et stderr pour traiter les infos
> par la suite.
>
>     Mais peut être y'a -t'il mieux...

sans passer par des fichiers intermediaire en utilisant un pipe
comme lorsque tu fais :

$ ps | grep mon_login

par exemple

int pipe1[2];
int pid;

pid=fork();

switch (pid) {
case -1: //err
case 0: // fils
    close(1);  // maintenant le fd (file descriptor) 1 (stdout) est libre
    dup(pid[1]); // dup duplic  le 1er descripteur libre
    close(pid[1]);  // netoyage
    execMACHIN
    break;
default: {
    char buf[1024];
    int n;
    while ((n=read(buf, 1024, pipe[1]))>0) {
    }
    break;
}

si tu voulais lire stderr et sdout, il te faut 2 pipe, et pour les lire en meme
temps, tu dois
utiliser la commande "select" pour savoir lequel des 2 est plein.

>
>
>     Pourriez-vous m'aidez ?

non :-)


--

        Spineux Alain

Romani ite domus.
======================================================================
  Spineux Alain                         E-MAIL : spineux@prm.ucl.ac.be
  INSTITUT STEVIN
  Catholic University of Louvain        FAX    : 32-10-472501
  PLACE DU LEVANT 2                     PHONE  : 32-10-472516
  B-1348 LOUVAIN-LA-NEUVE (BELGIUM)
=======================================================================


---------
This message was sent by Majordomo 1.94.3. Please repport problems to
manu@rtfm.be. If you want to be deleted from the list, send a mail to
majordomo@rtfm.be with "unsubscribe linux-team" in the body.