Sea*_*ock 0 c unix ubuntu posix
我正在尝试在我的程序中实现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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译程序时,我得到以下错误.
unipro @ ubuguest:/ SoftDev/ADSD/Module 1/Unit 1/Pratice/C/C_adv/unix $ cc killApp.c -o killApp
killApp.c:在函数'main'中:
killApp.c:29:错误:'EINVAL '
unclared (首次在此函数中使用)killApp.c:29:错误:(每个未声明的标识符仅报告一次
killApp.c:29:error:对于它出现的每个函数.)
killApp.c:33:error:' EPERM'未声明(首次使用此函数)
killApp.c:37:错误:'ESRCH'未声明(首次使用此函数)
unipro @ ubuguest:/ SoftDev/ADSD/Module 1/Unit 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;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
您尝试做的事情将无法工作,首先应该是#include <errno.h>(因为这errno是定义的地方,错误代码也是如此).其次,不要调用本地返回值变量errno(因为它存在并且是错误代码的位置).
例如.
#include <errno.h>
/* ... */
int rc;
/* ... */
rc = kill(pid, SIGHUP);
if (rc != 0)
{
switch (errno) {...}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8233 次 |
| 最近记录: |