C Tuyau de STDIN d'un Autre Programme
J'ai peine à comprendre la page de man pour le tuyau, donc j'ai un peu besoin d'aide pour comprendre comment prendre des canalisations d'entrée dans un exécutable externe.
J'ai 2 programmes: principal.o & journal.o
J'ai écrit principal.o à la fourchette. Voici ce qu'il est en train de faire:
- Parent fourche sera pipe données à l'enfant
- Enfant fourche sera exec journal.o
J'ai besoin de l'enfant de la fourche pour principal tube de STDIN de journal.o
journal.o prend simplement STDIN & journaux avec horodatage d'un fichier.
Mon code est composé d'un code de diverses StackOverflow pages je ne me souviens pas & la page de man pour le tuyau:
printf("\n> ");
while(fgets(input, MAXINPUTLINE, stdin)){
char buf;
int fd[2], num, status;
if(pipe(fd)){
perror("Pipe broke, dood");
return 111;
}
switch(fork()){
case -1:
perror("Fork is sad fais");
return 111;
case 0: //Child
close(fd[1]); //Close unused write end
while (read(fd[0], &buf, 1) > 0) write(STDOUT_FILENO, &buf, 1);
write(STDOUT_FILENO, "\n", 1);
close(fd[0]);
execlp("./log", "log", "log.txt", 0); //This is where I am confused
_exit(EXIT_FAILURE);
default: //Parent
data=stuff_happens_here();
close(fd[0]); //Close unused read end
write(fd[1], data, strlen(data));
close(fd[1]); //Reader will see EOF
wait(NULL); //Wait for child
}
printf("\n> ");
}
OriginalL'auteur RandomClown | 2013-11-25
Vous devez vous connecter pour publier un commentaire.
Je suppose que c'est ce que vous allez faire:
1. principal de la fourche, parent passer le message à l'enfant via le tuyau.
2. enfant de recevoir le message de la conduite, message de redirection de l'entrée standard STDIN, exécuter journal.
3. journal de recevoir des messages à partir de STDIN, faire quelque chose.
la clé pour cela est dup2 pour rediriger descripteur de fichier, à partir de tube de STDIN.
C'est de la modification de la version simple:
OriginalL'auteur moeCake
Je peux suggérer une approche plus simple. Il y a une fonction appelée
popen()
. Il fonctionne de manière très similaire à lasystem()
fonction, sauf que vous pouvez lire ou écrire dans/de l'enfantstdin/stdout
.Exemple:
Écrire "homme popen" dans votre console pour une description complète.
OriginalL'auteur egur
Vous pouvez utiliser dup2
Voir Cartographie UNIX pipe descripteurs de stdin et stdout dans C
OriginalL'auteur starrify