ERESTARTSYS
和EINT
之间有什么区别?
我发现错误代码确实不在用户空间中包含ERESTARTSYS
。
ERESTARTSYS
仅用于内核或驱动程序吗?
有人可以帮助我吗?
根据文档(https://lwn.net/Articles/17744/),其中说:“ nanosleep(),目前是该机制的唯一用户,只需将唤醒时间与指向用户参数的指针一起保存在重新启动块中。” 。
如果是这样,为什么nanosleep需要类型为req
的辩论者struct timespec *
。
根据linux程序手册,“ int nanosleep(const struct timespec * req,struct timespec * rem);如果调用被信号处理程序中断,nanosleep()返回-1,将errno设置为EINTR,并写入除非rem为NULL,否则rem指向结构的剩余时间。
我认为,如果内核可以在内部重新启动系统调用('do_nanosleep'),则无需将用户再次休眠的持续时间返回给用户空间。那就是我无法理解的。
ERESTARTSYS和EINT之间有什么区别?我发现错误代码确实不在用户空间中包括ERESTARTSYS。 ERESTARTSYS仅在内核或驱动程序中使用吗?是否有...
ERESTARTSYS
永远不会从用户代码中看到,您是正确的。这是内核重新启动调用或将EINTR返回给用户代码的标志。请参阅this discussion on the Linux Kernel Mailing List:
问题的标题与实际问题并不完全匹配。 @dsolimano确实回答了标题。