Je veux que le processus parent prenne les arguments de main() et envoie les caractères un à la fois au processus fils via un canal commençant par argv [1] et continuez à travers le reste des arguments (un appel à écrire pour chaque caractère).passer les arguments de la ligne de commande à un processus enfant et les compter
Je souhaite que le processus enfant compte les caractères envoyés par le processus parent et imprime le nombre de caractères reçus du parent. Le processus fils ne doit pas utiliser les arguments de main() de quelque façon que ce soit.
Qu'est-ce que je fais de mal? dois-je utiliser exec()?
sortie qui nest pas correct:
~ $ gc a03
gcc -Wall -g a03.c -o a03
~ $ ./a03 abcd ef ghi
child: counted 12 characters
~ $
est le programme ici ..
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv[])
{
int length = 0;
int i, count;
int fdest[2]; // for pipe
pid_t pid; //process IDs
char buffer[BUFSIZ];
if (pipe(fdest) < 0) /* attempt to create pipe */
printf("pipe error");
if ((pid = fork()) < 0) /* attempt to create child/parent process */
{
printf("fork error");
}
/* parent process */
else if (pid > 0) {
close(fdest[0]);
for(i = 1; i < argc; i++) /* write to pipe */
{
write(fdest[1], argv[i], strlen(argv[1]));
}
wait(0);
} else {
/* child Process */
close(fdest[1]);
for(i = 0; i < argc; i++)
{
length +=(strlen(argv[i])); /* get length of arguments */
}
count = read(fdest[0], buffer, length);
printf("\nchild: counted %d characters\n", count);
}
exit(0);
}
pour le processus fils - while (read (fdest [0], buffer, length)! = '\ N'; quelque chose liek cela? –
Oui, mais vous pourriez faire 'fdest' un simple caractère et le simplifier à' while (read (& fdest, buffer, 1)! = '\ n') '. – bta