Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/wait.h>
- #include <errno.h>
- #include <memory.h>
- #define MAX_CMD_LENGTH 100
- #define MAX_NUM_PARAMS 10
- int execpipe(char **argv1, char **argv2) {
- pid_t pid;
- int fd[2];
- char buffer[4096];
- printf("[PARENT] PID : %d \n", getpid());
- int err = pipe(fd);
- if (err == -1) {
- printf("Erreur lors de la création du pipe \n");
- return -1;
- }
- pid = fork();
- if (pid == 0) {
- /*
- char *arg = ".";
- if (argv[3] != NULL) {
- arg = argv[3];
- }
- */
- printf("[FILS] commande: %s %s \n", argv1[0], argv1[1]);
- dup2(fd[1], STDOUT_FILENO);
- close(fd[0]);
- close(fd[1]);
- printf("test\n");
- int err = execlp(argv1[0], argv1[0], argv1[1], (char *) 0);
- if (err == -1) {
- printf("Erreur execvp argv1[0] \n");
- perror("");
- return -1;
- }
- printf("[FILS] Commande réussis ! \n\n");
- _exit(0);
- }
- else if (pid > 0) {
- dup2(fd[0], STDIN_FILENO);
- close(fd[1]);
- close(fd[0]);
- int status;
- wait(&status);
- //int nbytes = read(fd[0], buffer, sizeof(buffer));
- //printf("[PARENT] Output : (%.*s) \n", nbytes, buffer);
- printf("Lancement de la 2eme commande pour le pipe %s %s\n", argv2[0], argv2[1]);
- int err = execlp(argv2[0], argv2[0], argv2[1], (char *) 0);
- if (err == -1) {
- printf("Erreur execl argv2[0]\n");
- perror("");
- return -1;
- }
- }
- else {
- printf("Error \n");
- }
- return 1;
- }
- int main(int argc, char *argv[]) {
- if (argc < 2) {
- printf("Usage ./a.out commande1 commande2 \n");
- return -1;
- }
- printf("NB : %d\n", argc);
- char cmd[MAX_CMD_LENGTH+1];
- char * params[MAX_NUM_PARAMS+1];
- char * argv1[MAX_NUM_PARAMS+1] = {0};
- char * argv2[MAX_NUM_PARAMS+1] = {0};
- int k, y, x;
- int f = 1;
- printf("Lancement du programme...\n");
- for (k=1; k < argc-1; k++) {
- if (strcmp(argv[k], "--") == 0) {
- f = 0; y = k;
- printf("pipe found\n");
- break;
- }
- }
- if (f==0) {
- for (x=0; x<k; x++) {
- argv1[x]=argv[x+1];
- }
- int z = 0;
- for (x=k+1; x<argc; x++) {
- argv2[z] = argv[x];
- z++;
- }
- return execpipe(argv1, argv2);
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement