我正在处理的家庭作业问题很简单,但是我是C语言的新手,所以我可能会陷入语法错误。我想做的是从另一个程序中调用一个程序,使用fork()分配一个新进程,然后等待子进程使用waitpid()完成。我正在尝试A.使waitpid()工作,并且B.获得一个简单的测试消息以在孩子完成后显示。
./ countprimes正在通过./countmaster远程运行。 ./countprimes工作正常,它只是将x到y的所有素数打印到屏幕上。 ./countmaster调用./countprimes。
#include <unistd.h>
#include <stdio.h>
int main(int argc, char* argv[]){
int processid = fork();
int status;
char* arguments[4];
arguments[0]="./countprimes";
arguments[1]="10";
arguments[2]="30";
arguments[3]=NULL;
if(processid == 0)
execvp("./countprimes,arguments);
else
waitpid(processid, &status, 0);
printf("test1")
}
我希望看到:计数素数实例从10开始到29结束计算10至29的素数实例为6TEST1
我看到的是没有test1消息。我也收到gcc警告:函数'waitpid'的隐式声明;您是说'getpid'吗?
我可以看到一些语法错误和缺少的标头:
#include <unistd.h>
#include <stdio.h>
#include <sys/wait.h>
int main(int argc, char* argv[]){
int processid = fork();
int status;
char* arguments[4];
arguments[0]="./countprimes";
arguments[1]="10";
arguments[2]="30";
arguments[3]=NULL;
if(processid == 0) {
execvp("./countprimes",arguments);
}
else {
waitpid(processid, &status, 0);
printf("test1");
}
}
缺少标题肯定会删除有关waitpid的警告消息。