【发布时间】:2010-09-07 12:30:22
【问题描述】:
我正在尝试在我的程序中实现 EINVAL、EPERM、ESRCH。
ERRORS
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/Module 1/单元 1/练习/C/C_adv/unix$ cc killApp.c -o killApp
killApp.c: 在 函数‘main’:
killApp.c:29: 错误:“EINVAL”未声明(首次使用 在这个函数中)
killApp.c:29: 错误:(每个未声明的标识符都是 只报告过一次
killApp.c:29: 错误:对于它出现的每个功能 中)
killApp.c:33:错误:'EPERM' 未声明(在此首次使用 功能)
killApp.c:37: 错误: 'ESRCH' 未声明(在此首次使用 功能)
unipro@ubuguest:/SoftDev/ADSD/模块 1/单元 1/练习/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;
}
}
谢谢。
【问题讨论】:
-
您可能应该使用
strerror或perror来获取错误消息,而不是自己编写。它更简单、更简洁,并且在许多系统上,它可以免费翻译成用户的母语。