Console Linux

Signaler
Messages postés
14
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
1 septembre 2008
-
Messages postés
14
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
1 septembre 2008
-
Bonjour,

J'aimerai recuperer grace a un programme en C++ les données affichées, sur la console Linux mais je ne sais pas comment faire.....
Si quelqu'un pouvais m'aider

8 réponses

Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
21
tu peux peut etre utiliser les pipes
++
Messages postés
14
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
1 septembre 2008

Ba justement je voulais utiliser ca au début mais ca me donne pas la totalité de l'affichage....:(
Messages postés
71
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
14 septembre 2007

Si tu donnais un peu plus de précisions, on pourrait peut-être t'aider d'avantages. Qu'est-ce que tu cherches à faire, lances-tu les programmes toi même ?
Messages postés
14
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
1 septembre 2008

Alors en fait j'ai fait un programma qui fais un fils. Ce fils lance un
programme qui n'est pas de moi et qui affiche beaucoup de données.
J'aimerai récuperer tous ces données pour pouvoir les traiter mais je
ne sais pas comment faire car avec un pipe, je n'arrive qu'a afficher
qu'une partie du résultat

C'est pour cela que je cherche quelque chose permettant de récuperer les affichages de la console.....
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
21
Dans ton pipe, il faudrait peut etre que tu redirige la sortie stdout et stderr, car ces 2 sorties peuvent afficher des informations dans la console
++
Messages postés
14
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
1 septembre 2008

Je viens d'essayer laurent1024 mais ca ne change rien
Donc si quelqu'un a une autres idée je suis preneur Merci :)
Messages postés
71
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
14 septembre 2007

Les pipes (ou les sockets) fonctionnent très bien pour faire ce que tu demandes. A mon avis, il doit y avoir quelques erreurs dans ton code. A titre d'information, voilà un bout de code repris d'un projet qui fait ce que tu demandes. Je croisi que les noms de variables et de fonctions sont assez explicites. Le troisièmem argument de la fonction est un pointeur vers un entier dans lequel sera stocké le descripteur du socket à utiliser pour lire l'output du programme. Par exemple:

int output_desc;
io_popen(, , &output_desc);
read(output_desc, ...

int
io_popen(char *argv[], char *envp[], int *srv_child)
{
int sockpair[2];
int child_srv;

if(socketpair(AF_UNIX, SOCK_STREAM, 0, sockpair) == -1)
{
log_error("socketpair failed: %s", strerror(errno));
return -1;
}

*srv_child = sockpair[0];
child_srv = sockpair[1];

int retval = fork();
if(retval < 0)
{
/* parent - fork has failed */
log_error("fork failed: %s", strerror(errno));
io_close(child_srv);
io_close(*srv_child);
return -1;
}
else if(retval > 0)
{
/* parent - close the file descriptor used by the child */
io_close(child_srv);
return 0;
}

/*---------------*
| Child process |
*---------------*/

/* close socket used by parent */
io_close(*srv_child);

/* logs shouldn't be accessed by cgi */
log_close();

/* close stdin and stdout */
io_close(STDIN_FILENO);
io_close(STDOUT_FILENO);

/* duplicate input and output to stdin and stdout */
if (dup2(child_srv, STDIN_FILENO) != STDIN_FILENO ||
dup2(child_srv, STDOUT_FILENO) != STDOUT_FILENO)
{
io_close(child_srv);
debug_msg(ERROR, "dup2 failed: %s", strerror(errno));
_exit(EXIT_FAILURE);
}

execve(argv[0], argv, envp);

/* execve doesn't return on success */
if (errno ENOEXEC || errno EACCES)
debug_msg(ERROR, "CGI file not executable");
else
debug_msg(ERROR, "execve failed: %s", strerror(errno));

/* prevent the call to the function registered with atexit */
_exit(EXIT_FAILURE);
}
Messages postés
14
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
1 septembre 2008

Merci Bel0, je vais essayer ca :)