我正在尝试在我的程序中实现EINVAL、EPERM、ESRCH。
错误输入无效信号
已指定。重新审视过程
没有发送
向任何目标进程发送信号。
ESRCH pid或过程组执行
不存在。
这是我的源代码:

#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>

int main(void)
{

 int errno, pid;

 puts("Enter a process id : ");
 scanf("%d", &pid);

    errno = kill(pid, 1);

 if(errno == -1)
 {
  printf("Cannot find or kill the specified process\n");

 }


 switch(errno)
 {
  case EINVAL:
   printf("An invalid signal was specified.\n");
   break;

  case EPERM:
   printf("The process does not have permission to send the signal to any of the target processes.\n");
   break;

  case ESRCH:
   printf("The  pid or process group does not exist.");
   break;
 }

}

当我编译程序时,我会得到以下错误。
unipro@ubuguest:/SoftDev/ADSD/模块
1/单元1/实践/C/C_adv/unix$cc
killApp.c-o killApp killApp.c:在
函数“main”:killApp.c:29:
错误:“EINVAL”未声明(首次使用
在此函数中)killApp.c:29:
错误:(每个未声明的标识符都是
只报告过一次killApp.c:29:
错误:对于每个函数
in.)killApp.c:33:错误:“EPERM”
未声明(首次使用
函数)killApp.c:37:错误:
“ESRCH”未声明(首次使用
功能)
unipro@ubuguest:/SoftDev/ADSD/模块
1/单元1/实践/C/C U adv/unix$
那么,EINVAL,EPERM,ESRCH的定义是什么呢?我需要定义任何额外的头文件吗?或者我用错误的方式来实现它?
更新代码[工作代码]:
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>

int main(void)
{

    int status, pid;

    puts("Enter a process id : ");
    scanf("%d", &pid);

    status = kill(pid, 1);



    switch(errno)
    {
        case EINVAL:
            printf("An invalid signal was specified.\n");
            break;

        case EPERM:
            printf("The process does not have permission to send the signal to any of the target processes.\n");
            break;

        case ESRCH:
            printf("The  pid or process group does not exist.");
            break;
    }

}

谢谢。

最佳答案

你要做的是行不通的,首先你应该#include <errno.h>(因为这里定义了errno,错误代码也是如此)。
第二,不要调用本地返回值变量ErnO(如存在的错误代码所在)。
如。

#include <errno.h>
/* ... */

int rc;
/* ... */

rc = kill(pid, SIGHUP);
if (rc != 0)
{
    switch (errno) {...}
}

关于c - 在Kill()中实现EINVAL,EPERM,ESRCH,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3658668/

10-11 23:23