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