每次运行此代码时,都会传入 0 和 null 作为我的子进程的参数。我知道它与指针有关,但我似乎无法填充我的数组并传递参数。我已经看了太久了,我希望有人能发现一个愚蠢的错误。
/* 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;
}