这些返回值之间有什么区别? “ ERESTARTSYS”和“ EINT”?如何正确使用它们?

问题描述 投票:2回答:2

ERESTARTSYSEINT之间有什么区别?

我发现错误代码确实不在用户空间中包含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仅在内核或驱动程序中使用吗?是否有...

c linux kernel driver
2个回答
2
投票

ERESTARTSYS永远不会从用户代码中看到,您是正确的。这是内核重新启动调用或将EINTR返回给用户代码的标志。请参阅this discussion on the Linux Kernel Mailing List


1
投票

问题的标题与实际问题并不完全匹配。 @dsolimano确实回答了标题。

© www.soinside.com 2019 - 2024. All rights reserved.