我在编译某些代码以检查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;
}
}
答案 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;