Redirection stdout vers un Terminal
Résolu
xcel3000
-
vlmath Messages postés 833 Statut Contributeur -
vlmath Messages postés 833 Statut Contributeur -
Bonjour a tous,
Voila, j'ai un problème dans un de mes programmes et je n'arrive pas à trouver une solution.
J'ai deux processus, le premier s'appelle Admin,c et le deuxieme Metro.c
Les deux programmes s'executent chacun dans un Terminal (Shell) different.
Je voudrais rediriger stdout de Metro.c sur le terminal du processus Admin.c
Peut être un début de solution était de faire;
Dans le processus Admin:
-------------------------------------
//-------------------------------------------------SAUVEGARDE DU NOM DU TERMINAL------------------------------------------
if(isatty(1))
{
sprintf(szBufferDonnee,"%s",ttyname(1));
if((hdFich= open("./NameTTY.txt",O_WRONLY|O_CREAT,(int)0600))==-1)
{
perror("(Admin) Impossible d'enregistrer le fichier PidAdmin.txt");
}
if(write(hdFich,&szBufferDonnee,sizeof(szBufferDonnee))==0){ exit(0);}
close(hdFich);
}
Dans le processus Metro:
-------------------------------------
//---------------------------REDIRECTION SORTIES--------------------------
if((idfich=open("NameTTY.txt",O_RDONLY))==(int)NULL)
{
perror("Erreur d'ouverture du fichier NameTTY.txt\n");
exit(1);
}
read(idfich,&szBufferDonnee,sizeof(szBufferDonnee));
close(idfich);
if((hfDevice=(FILE*)open(szBufferDonnee,O_RDONLY))==(int)NULL)
{
perror("Erreur d'ouverture du terminal\n");
exit(1);
}
if(!dup2(fileno(hfDevice),1))
{
perror("Erreur de dup2...");
exit(1);
}
Mais cela, ne marche pas... Pourquoi? Quelqu'un aurait il une solution?
D'avance merci a tout ceux qui prendront le temps de lire mon message.
Voila, j'ai un problème dans un de mes programmes et je n'arrive pas à trouver une solution.
J'ai deux processus, le premier s'appelle Admin,c et le deuxieme Metro.c
Les deux programmes s'executent chacun dans un Terminal (Shell) different.
Je voudrais rediriger stdout de Metro.c sur le terminal du processus Admin.c
Peut être un début de solution était de faire;
Dans le processus Admin:
-------------------------------------
//-------------------------------------------------SAUVEGARDE DU NOM DU TERMINAL------------------------------------------
if(isatty(1))
{
sprintf(szBufferDonnee,"%s",ttyname(1));
if((hdFich= open("./NameTTY.txt",O_WRONLY|O_CREAT,(int)0600))==-1)
{
perror("(Admin) Impossible d'enregistrer le fichier PidAdmin.txt");
}
if(write(hdFich,&szBufferDonnee,sizeof(szBufferDonnee))==0){ exit(0);}
close(hdFich);
}
Dans le processus Metro:
-------------------------------------
//---------------------------REDIRECTION SORTIES--------------------------
if((idfich=open("NameTTY.txt",O_RDONLY))==(int)NULL)
{
perror("Erreur d'ouverture du fichier NameTTY.txt\n");
exit(1);
}
read(idfich,&szBufferDonnee,sizeof(szBufferDonnee));
close(idfich);
if((hfDevice=(FILE*)open(szBufferDonnee,O_RDONLY))==(int)NULL)
{
perror("Erreur d'ouverture du terminal\n");
exit(1);
}
if(!dup2(fileno(hfDevice),1))
{
perror("Erreur de dup2...");
exit(1);
}
Mais cela, ne marche pas... Pourquoi? Quelqu'un aurait il une solution?
D'avance merci a tout ceux qui prendront le temps de lire mon message.
A voir également:
- Redirection stdout vers un Terminal
- Commande terminal mac - Guide
- Terminal de fret paris valedwaz - Forum Consommation & Internet
- Windows 7 vers windows 10 - Accueil - Mise à jour
- Avertissement de redirection ✓ - Forum Réseaux sociaux
- Clavier qwerty vers azerty - Guide
1 réponse
Salut,
Si j'ai bien compris, tu voudrais que toutes les sorties de Metro.c seront les entrées de Admin.c ?
Pour ceci, sous linux en console, t'as le | (comme le ou en programmation) qui te permet de rediriger les sorties d'un programme.
$:~>Metro | Admin
En espérant avoir répondu à ta question.
@Bientôt
Si j'ai bien compris, tu voudrais que toutes les sorties de Metro.c seront les entrées de Admin.c ?
Pour ceci, sous linux en console, t'as le | (comme le ou en programmation) qui te permet de rediriger les sorties d'un programme.
$:~>Metro | Admin
En espérant avoir répondu à ta question.
@Bientôt