【发布时间】:2012-03-25 04:42:56
【问题描述】:
需要明确的是,这是一个设计问题,而不是一个实现问题
我想知道 POSIX 为何如此行事的原因。 POSIX 系统调用在给定无效内存位置时返回 EFAULT 而不是使用户空间程序崩溃(通过发送 sigsegv),这使得它们的行为与用户空间函数不一致。
为什么?这不只是隐藏内存错误吗?这是一个历史错误还是有充分的理由?
【问题讨论】:
-
对我来说,sigsegv/sigbus 也更有意义。现在我正在玩 2 个自定义系统调用,它们也应该有(更慢的)用户空间模拟。我不明白为什么实际的系统调用和仿真在传递无效缓冲区时应该表现不同。甚至 POSIX 似乎也认为用户不必关心系统函数是真正的系统调用还是用户空间函数。我的相关问题:stackoverflow.com/questions/44239545/…
-
这是
strace ./a.out非常适合调试不检查系统调用错误的玩具程序的原因之一。
标签: c segmentation-fault posix standards signals