Pages : 1
#1 Le 05/12/2008, à 14:06
- Inujel
Créer processus et rediriger IO
Bonjour !
Je débute en programmation sous UNIX et j'aurais besoin d'un coup de pouce (le titre dit déjà presque tout).
J'aurais besoin d'au sein d'un programme en C, d'ouvrir une nouvelle fenêtre de terminal et d'y exécuter un exécutable.
Merci d'avance !
Julien.
Hors ligne
#2 Le 05/12/2008, à 14:20
- Link31
Re : Créer processus et rediriger IO
#include <stdlib.h>
int main(int argc, char *argv[])
{
system("xterm -e 'une_commande > fichier_où_est_redirigée_la_sortie'");
return 0;
}
Dernière modification par Link31 (Le 05/12/2008, à 14:22)
Hors ligne
#3 Le 05/12/2008, à 14:27
- Inujel
Re : Créer processus et rediriger IO
Génial merci !
Hors ligne
#4 Le 05/12/2008, à 16:04
- Link31
Re : Créer processus et rediriger IO
Au fait, pourquoi veux-tu ouvrir un terminal si c'est pour "rediriger la sortie" du processus (cf. le titre), ou inversement ?
Hors ligne
#5 Le 05/12/2008, à 16:08
- philpep-tlse
Re : Créer processus et rediriger IO
Ouaip, system() est pratique car elle permet d'ecrire rapidement le code.
Par contre, tand que ton processus n'est pas terminé, le code n'est plus exécuté. (càd que le programme attend la mort du fils wait(NULL);)
Pour faire les choses proprement (car j'ai aussi souvent lu que system() caymal) il faut utiilser fork() pour dupliquer le processus puis un exec pour lancer le nouveau binnaire dans ce processus.
man fork
man 3 exec
man wait
ça permet de lancer le processus en backgound, par contre le code est moins marrant
Voilà la fonction d'exécution exec_file() d'un shell que j'ai écris elle fait exactement ça.
(cas ou liste->flags & BG est VRAI)
Désolé, la fonction est lourde pour ce que tu veux faire, mais le principe y est :
http://tux-atome.fr/?p=philsh.git;a=blo … e3c49f48ba
le "lol" est aux boulets ce que le ";" est aux programmeurs
blog | Wiki Fvwm | Essayez le Window Manager From Scatch | Topic WMFS
Hors ligne
#6 Le 09/12/2008, à 10:24
- Inujel
Re : Créer processus et rediriger IO
Link31> On s'est mal compris, je voulais dire rediriger la sortie vers le nouveau terminal, contrairement à un fork où la sortie est dans le même terminal que le père.
Merci philpep, mais je vais me contenter de la version rapide pour cet exercice ;-)
Hors ligne