Chaque fois que ce code est exécuté, les 0 et un null sont transmis en tant qu'arguments pour mon processus fils. Je sais que c'est quelque chose à voir avec les pointeurs, mais je ne peux pas sembler remplir mon tableau et transmettre les arguments. Je l'ai regardé trop longtemps et j'espère que quelqu'un peut repérer une erreur stupide.Problème avec des pointeurs et des processus enfants dans C
/* exec example *
* for CS-350 */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int pid,i;
int sum;
int total = 0;
char *procpath = "slave";
char *procname = "slave";
int size = argc-1;
int input[size];
int k;
for (k = 0; k < size; k++)
{
int m = (strtol(argv[k + 1], NULL, 10));
// printf("%d", m);
input[k] = m;
printf("%d", input[k]);
}
// size = (size + 1)/2;
int count = 0;
while (size > 1)
{
for (i = 0; i < size; i = i + 2)
{
// create a child process
pid = fork();
if (pid == 0)
{
// child process execution code--shows exec family calls
if (i < argc - 1)
{
execl(procpath, procname, &input[i], &input[i + 1], pid,(char *) 0);
}
else
{
execl(procpath, procname, &input[i], 0, pid, (char *) 0);
}
// execvp(procname,argv);
// if exec returns, means the call has failed.
perror("execl failed to run slave program");
exit(1);
}
else if (pid > 0)
{
// print out command line arguments
waitpid(-1, &sum);
}
else
{
printf("call to fork failed, no child\n");
exit(-1);
}
sum = WEXITSTATUS(sum);
printf("MASTER: partial sum = %d, and the pid of my slave = %d\n\n",sum,pid);
int l;
for (l = 0 ; l < sizeof(input)/sizeof(input[0]) ; l ++)
{
printf("\n%d\n", input[l]);
}
// printf("%d", input[i/2]);
input[(i + 1)/2] = sum;
// printf("%d", input[i/2]);
}
size = (size + 1)/2;
}
printf("MASTER: total sum = %d\n",input[0]);
exit(0);
}
/* exec example-- slave *
* for CS-350 */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
printf("hey whats up %s",argv[1]);
int f = strtol(argv[1], NULL, 10);
int s = strtol(argv[2],NULL,10);
int sum = f + s;
printf("I'm the slave my pid is %s\n",argv[3]);
printf("SLAVE: first argumement = %d, second argument = %d, sum = %d\n", f, s, sum);
return sum;
}
Peut-être que vous pouvez ajouter ce que votre look de comportement souhaité aime aider les autres à vous aider. – xiamx
Lisez la page de manuel pour [execl] (http://linux.die.net/man/3/execl). Il indique clairement que chacun des arguments après le chemin doit être "des chaînes terminées par zéro qui représentent la liste d'arguments". Vous passez un mélange de pointeurs à des entiers et des entiers, pas à des chaînes à terminaison nulle. – kaylum