我正在尝试在我的程序中实现EINVAL,EPERM,ESRCH。
错误
EINVAL信号无效 被指定。
EPERM这个过程 没有发送权限 发信号到任何目标进程。 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 / Pratice / C / C_adv / unix $ cc killApp.c -o killApp
killApp.c:In function'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 / Pratice / C / C_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;
}
}
感谢。
答案 0 :(得分:5)
你要做的事情是行不通的,首先你应该#include <errno.h>
(因为那里定义了errno
,错误代码也是如此)。
其次,不要调用本地返回值变量errno(因为它存在并且是错误代码的位置)。
例如
#include <errno.h>
/* ... */
int rc;
/* ... */
rc = kill(pid, SIGHUP);
if (rc != 0)
{
switch (errno) {...}
}