gpt4 book ai didi

c - 从以前的 libc.so.6 库调用访问 errno 值的方法?

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:09 26 4
gpt4 key购买 nike

如果我尝试做的不是一个好主意或不受支持,请随时告诉我。我正在尝试为 API 使用各种系统库(libc.so.6libpthread.so.0 等)。 API 将调用这些库以访问 open()close() 等...

我不确定如何在失败时处理errno,返回-1,而不是直接返回errno。当我调用 libc.so.6 中的 close() 时,它会在失败时返回 -1,因此我可以检测到发生了错误。但是,我似乎无法在 libc 中找到任何允许我查询可能已由同一线程中的先前函数调用设置的 errno 的当前值的机制。这在调用 pthread 函数时不是问题,因为它们直接返回 errno 的值,我可以使用它。

有没有一种方法可以确定给定线程的 errno 的当前值,该函数执行了一个会设置 errno 的函数(例如 close ()) 使用某种库调用?

可能的解决方案:

我可以编写一个调用 close() 等的包装器库...在错误状态下查询 errno,并返回 errno直接,但我试图避免必须包含必须包含在 API 中的自定义库。

如果有一种方法可以调用标准库,那就太理想了。

最佳答案

errno在像 linux 这样的多线程环境中不是每个进程的全局变量(以前是),有一个不同的 errno每个线程的伪变量(实际上 errno 是在 #include <errno.h> 中定义的宏)。回答你的问题,最好和最简单的方法来保存 errno来自先前系统调用的是复制errno一旦系统调用完成。您甚至可以围绕您的系统调用创建一个包装器,以将 errno 值存储在一个循环缓冲区中,这样您就可以获得最后一个、上一个到最后一个等等,直到达到某个固定值。由于存储所有这些值需要一定量的内存,因此系统中没有为此调用任何配置。此外,errno value 是与一个线程进行的最后一次系统调用相关联的东西,因此您必须决定如何以及何时进行系统调用,您还可以决定是否要存储错误值的方式和时间。

关于c - 从以前的 libc.so.6 库调用访问 errno 值的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41730537/

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