Exécuter des pipes en C
Résolu
hauzzl
Messages postés
3
Statut
Membre
-
hauzzl Messages postés 3 Statut Membre -
hauzzl Messages postés 3 Statut Membre -
Bonjour,
Il m'a été demandé d'effectuer deux exercices qui consistent à:
Écrire une fonction
qui affichera quelque chose comme
et
Écrire une fonction
Exemple :
J'ai à ma disposition ce code ci-dessous pour m'aider à la réalisation de l'exercice:
Le problème est que je ne sais pas par où commencer.
Il m'a été demandé d'effectuer deux exercices qui consistent à:
Écrire une fonction
void execute_pipe(char**argv1,char**argv2)qui prend en argument deux tableaux de chaînes de caractères terminés par NULL, chaque tableau correspondant à une commande avec ses arguments. La fonction exécute les deux commandes en redirigeant la sortie de la première commande sur l’entrée de la seconde. Par exemple, le programme suivant :
int main(){
char *argv1[]= {"ls", "-la", NULL};
char *argv2[]= {"grep", "toto", NULL};
execute_pipe(argv1, argv2);
return0;
}
qui affichera quelque chose comme
-rw-r--r-- 1 gim users 17 2010-10-08 18:10 toto
et
Écrire une fonction
void execute_pipes(char***argvs)qui permet de chaîner plusieurs commandes. La sortie de la première est redirigée vers l’entrée de la seconde et ainsi de suite.
Exemple :
int main(){
char*argv1[]= {"ls", "-la", NULL};
char*argv2[]= {"grep", "toto", NULL};
char*argv3[]= {"tr", "a-z", "A-Z", NULL};
char**argvs[]= {argv1, argv2, argv3,NULL};
execute_tubes(argvs);
return0;
}
J'ai à ma disposition ce code ci-dessous pour m'aider à la réalisation de l'exercice:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include "utils.h"
void
panic(char *file, int line, char *msg)
{
fprintf(stderr, "%s:%d: %s\n",
file, line, msg);
exit(1);
}
void
handle_error(int rc, char *file, int line, char *msg)
{
if (rc < 0) {
fprintf(stderr, "%s:%d: %s: %s\n",
file, line, msg, strerror(errno));
exit(1);
}
}
ssize_t
write_all(int fd, const void *buf, size_t count)
{
const char *charbuf = buf;
size_t buf_div = 0;
while (buf_div < count) {
int rc = write(fd, charbuf + buf_div,
count - buf_div);
if (rc < 0) {
return -1;
}
buf_div += rc;
}
return buf_div;
}
ssize_t
read_all(int fd, void *buf, size_t count)
{
char *charbuf = buf;
size_t buf_div = 0;
while (buf_div < count) {
int rc = read(fd, charbuf + buf_div, count - buf_div);
if (rc < 0) {
return -1;
}
if (rc == 0) {
break;
}
buf_div += rc;
}
return buf_div;
}
Le problème est que je ne sais pas par où commencer.
A voir également:
- Exécuter des pipes en C
- Executer un programme au demarrage - Guide
- Impossible d'exécuter le code car xinput1_3.dll est introuvable ✓ - Forum Jeux PC
- Comment avoir des pips sur plato - Forum Jeux vidéo
- Commandes executer - Guide
- Executer fichier jar ✓ - Forum Windows