gpt4 book ai didi

error-handling - linux内核中的系统调用错误处理

转载 作者:行者123 更新时间:2023-12-02 22:36:26 24 4
gpt4 key购买 nike

我正在 linux 内核中编写一个新的系统调用。我想实现一个错误处理系统来向使用 sycall 的用户返回一个描述错误类型的代码。我想知道这是如何在内核中完成的,因为我想遵循标准。我想让用户阅读 errno 变量或等效的东西,以了解发生的错误。
谢谢你。

附言我正在使用可用的最新版本的 linux。

最佳答案

您的大部分任务由 libc 和低级内核系统调用处理程序(用汇编编写的部分)自动处理。处理错误代码的内核约定是返回一个负错误常量,比如 -ENOMEM 。零或正数表示成功。这在整个内核中使用。

如果你定义了新的 sycall 入口点 static asmlinkage long my_new_syscall (int param) {...} ,它只需要返回 -ENOMEM (或类似的)。如果您使用 libc 的 syscall(nr, param) 调用系统调用,那么在出现错误时它将返回 -1 并且 ENOMEM (正数)将在 errno 中。

您可以使用 include/asm-generic/{errno,errno-base}.h 中定义的许多错误代码(例如 ENOMEM )。如果这些都不符合您的目的,您可以将自己的错误编号添加到这些文件中,但请注意,您还需要修改用户空间可见的内核头文件以显示相同的编号,因此会更加困难设置系统以使用您的修改。如果没有必要,请不要这样做。

关于error-handling - linux内核中的系统调用错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3549672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com