Everytime this code is run, 0's and a null are passed in as the arguments for my child process. I know its something to do with pointers, but I cant seem to populate my array and pass the arguments along. I've looked at it too long and I'm hoping someone can spot a dumb mistake.
/* 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;
}