La connexion n commandes avec des tuyaux dans un shell?

Je suis en train de mettre en œuvre une coquille dans C. je peux exécuter des commandes simples très bien avec un simple execvp (), mais l'une des exigences est de gérer des commandes comme ceci: "ls -l | tête | queue -4" avec un " de "en boucle et seulement un" pipe()' déclaration de rediriger l'entrée standard stdin et stdout. Maintenant, après des jours je suis un peu perdu.

N = Nombre de commandes simples (3 dans l'exemple: ls, tête, queue)
commandes = une liste de structures avec les commandes, comme ceci:

commands[0].argv[0]: ls
commands[0].argv[1]: -l
commands[1].argv[0]: head
commands[2].argv[0]: tail
commands[2].argv[1]: -4

Alors, j'ai fait la boucle for, et a commencé à rediriger stdin et stdout afin de relier toutes les commandes avec des tuyaux, mais...je suis juste aucune idée pourquoi ça ne marche pas.

for (i=0; i < n; i++){

pipe(pipe);
if(fork()==0){  //CHILD

    close(pipe[0]);
    close(1);
    dup(pipe[1]);
    close(pipe[1]);

    execvp(commands[i].argv[0], &commands[i].argv[0]);
    perror("ERROR: ");
    exit(-1);

}else{      //FATHER

    close(pipe[1]);
    close(0);
    dup(pipe[0]);
    close(pipe[0]);

}
}

Ce que je veux créer est une "ligne" de childed processus:

[ls-l] ----tuyau----> [tête] ----tuyau----> [queue -4]

Tout ce processus ont une racine (le processus en cours d'exécution de mon shell) donc, le premier père est aussi un enfant de la coquille, je suis un peu épuisé déjà, quelqu'un peut m'aider s'il vous plaît ici?

Je ne suis même pas sûr si les enfants doivent être ceux de l'exécution de la commande.

Merci les gars !!

  • Est-ce devoirs? Si ce n'est pas simplement exécuter /bin/sh avec les arguments appropriés. Pourquoi réinventer la roue?
  • Ce n'est que l'une des exigences d'un 3 pages volontaire de la pratique. Pas exactement les devoirs, mais je voudrais savoir comment faire cela, ou au moins obtenir quelques indices.
  • il y a de nombreux posts ici sur S. O. qui couvrent le matériel de base vous aurez besoin de maîtriser ce sujet. Bonne chance.
  • BTW, qui collège est-ce qui est de l'envoi de tous ses élèves à S. O. pour les aider au lieu de fournir elles-mêmes. Vous savez, si je peux éviter l'envoi de ma fille il y a...
  • pouvez-vous poster le code complet
InformationsquelleAutor user1031296 | 2011-11-10