我正在尝试在我的程序中实现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/