甲善意 SIGILL将具有si_code所述ILL_值中的一个(例如,IL_ILLADR)的.用户请求的SIGILL将具有si_codeSI_值之一(通常为SI_USER).
在相关的POSIX值是:
[Kernel-generated]
ILL_ILLOPC Illegal opcode.
ILL_ILLOPN Illegal operand.
ILL_ILLADR Illegal addressing mode.
ILL_ILLTRP Illegal trap.
ILL_PRVOPC Privileged opcode.
ILL_PRVREG Privileged register.
ILL_COPROC Coprocessor error.
ILL_BADSTK Internal stack error.
[User-requested]
SI_USER Signal sent by kill().
SI_QUEUE Signal sent by the sigqueue().
SI_TIMER Signal generated by expiration of a timer set by timer_settime().
SI_ASYNCIO Signal generated by completion of an asynchronous I/O request.
SI_MESGQ Signal generated by arrival of a message on an empty message queue.
Run Code Online (Sandbox Code Playgroud)
举例来说,在这个问题上的食谱给我ILL_ILLOPN,而kill(1)并kill(2)给我零(SI_USER).
当然,您的实现可能会为POSIX列表添加值.从历史上看,用户或流程生成的si_code值<= 0,这仍然很常见.您的实现也可能有一个方便的宏来协助.例如,Linux提供:
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4975 次 |
| 最近记录: |