预期';'在'{'标记第28行之前

时间:2014-10-21 04:27:25

标签: c pid nagios

我在编译某些代码以检查pids是否仍然存在时遇到问题。是的,我是C的新手,我为格式化道歉。我似乎无法解决这个问题。

尝试编译时返回错误。

cc pid_check_with_sig.c -o pid_check_with_sig
pid_check_with_sig.c: In function ‘kill’:
pid_check_with_sig.c:28: error: expected ‘;’ before ‘{’ token

我的代码:

#include <stdio.h>    //Needed for standard I/O
#include <stdlib.h>   //Needed for exit
#include <signal.h>   //Needed for kill function

int main(int argc, char *argv[])
{
   FILE *pf;
   static char pidnum;
   pf = fopen(argv[1], "r");

   if (pf == NULL){
      printf("Pid file doesn't exist\n");
      return 2;
   }
   else {
      do  {pidnum = getc(pf);         /* get one character from the file */
      }while (pidnum != EOF);     /* repeat until EOF (end of file) */
      fclose(pf);                 /* Close pidfile */
   }
   return pidnum;
}
pid_t kill(pid_t pidnum, int sig) {        /* function declaration */
   {
      if ((kill (pidnum, 0)) == -1){
         printf("The pid %s is no longer valid", pidnum);
         return 2;
      }
      else ((kill (pidnum, 0)) == 0){
         prinrf("The pid %s is valid", pidnum);
      }  return 0;
   }
}

6 个答案:

答案 0 :(得分:1)

else ((kill (pidnum, 0)) == 0){

应该是:

else if ((kill (pidnum, 0)) == 0){

答案 1 :(得分:1)

if( condition )
{
    do something;
}
else if(condition)
{
    do something;
}
else
{
    do something;
}

你不能使用&#34; condition&#34;只是&#34;否则&#34;。所以&#34;否则((kill(pidnum,0))== 0)&#34;所以你应该使用&#34;否则如果&#34;这里。

答案 2 :(得分:1)

你不能在else语句中使用condition。要么改变

else ((kill (pidnum, 0)) == 0){
     prinrf("The pid %s is valid", pidnum);
  }

else {
     prinrf("The pid %s is valid", pidnum);
  } 

或将if语句写为:

else if((kill (pidnum, 0)) == 0){
     prinrf("The pid %s is valid", pidnum);
  }

答案 3 :(得分:0)

最后一个案例印刷语句中有一个拼写错误。 我认为应该解决问题

答案 4 :(得分:0)

请检查最后一个&#34;否则&#34;。在其他之后,没有条件。如果您想在else之后添加条件,请改用else 删除最后一个&#34;}&#34;。

答案 5 :(得分:0)

pid_check_with_sig.c:28: error: expected ‘;’ before ‘{’ token

else不能有条件,它必须是else if (statement) {} 您的编译器将((kill (pidnum, 0)) == 0)视为没有终结符的语句,后跟一个单独的代码块:

else
{
    //evaluate kill(pidnum,0), compare with 0 and forget the result.
    ((kill (pidnum, 0)) == 0)  //note the missing ';'
}
{
    printf("The pid %s is valid", pidnum);
}

你在printf电话中也有一个拼写错误。

有问题的行应该是:

28:    else if ((kill (pidnum, 0)) == 0){
29:        printf("The pid %s is valid", pidnum);
30:    }  return 0;