C 使用系统调用时的Printf()

C 使用系统调用时的Printf(),c,linux,system-calls,C,Linux,System Calls,我正在做的作业很简单,但我是C语言新手,所以我可能会被语法错误所困扰。我试图做的是从另一个程序调用一个程序,使用fork()分配一个新进程,然后等待子进程完成使用waitpid()。我正在尝试A.让waitpid()正常工作,B.在孩子完成后获得一条简单的测试消息 ./countprimes正在通过远程运行。/countmaster/countprimes工作正常,只需将x到y的所有primes打印到屏幕上/countmaster呼叫。/countprimes #include <unis

我正在做的作业很简单,但我是C语言新手,所以我可能会被语法错误所困扰。我试图做的是从另一个程序调用一个程序,使用
fork()
分配一个新进程,然后等待子进程完成使用
waitpid()
。我正在尝试A.让
waitpid()
正常工作,B.在孩子完成后获得一条简单的测试消息

./countprimes正在通过远程运行。/countmaster/countprimes工作正常,只需将x到y的所有primes打印到屏幕上/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");
}
#包括
#包括
int main(int argc,char*argv[]){
int processid=fork();
智力状态;
char*参数[4];
参数[0]=“/countprimes”;
参数[1]=“10”;
参数[2]=“30”;
参数[3]=NULL;
if(processid==0)
execvp(“./countprimes”,参数);
其他的
waitpid(进程ID和状态,0);
printf(“test1”);
}
我希望看到: 计算从10开始到29结束的素数实例 计数素数10到29的实例是6 测试1


我看到的不是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");
            } 
    }
#包括
#包括
#包括
int main(int argc,char*argv[]){
int processid=fork();
智力状态;
char*参数[4];
参数[0]=“/countprimes”;
参数[1]=“10”;
参数[2]=“30”;
参数[3]=NULL;
if(processid==0){
execvp(“./countprimes”,参数);
}否则{
waitpid(进程ID和状态,0);
printf(“test1”);
} 
}

您应该始终在语句块周围使用
{}
(如
if
else
while
for
,…),即使该语句块只包含一条语句。在查看代码时,您将看到为什么养成这种习惯是一件好事。(C不考虑缩进是显著的);关于
waitpid
的警告是因为您没有包含声明该函数的头文件。尝试在开头添加
#包括
。@DevSolar我非常不同意。编码风格是一种判断。增加代码混乱会降低可读性,从而降低可维护性。如果我在签入
void
-返回函数后立即
返回
,我不会使用大括号,除非我在需要它的公司/项目中工作。这可以消除编译器错误。但是,我不明白为什么printf()语句似乎永远无法正常工作。我试图每隔一行代码添加printf()语句,但从未打印过。有什么建议吗?@RobertMunroe这很奇怪,因为我可以运行代码并查看printf输出。