- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如果我尝试做的不是一个好主意或不受支持,请随时告诉我。我正在尝试为 API 使用各种系统库(libc.so.6
、libpthread.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/
我是 firebase 的新手,我正在尝试分页查询。我喜欢有一个“下一个”和“上一个”按钮。我的下一个按钮工作正常,我的问题是单击上一个 引用:https://firebase.google.com/
抱歉,标题这么蹩脚,但我只是不知道该放什么,希望你能理解。另外,我不知道以前是否有人问过类似的问题,因为我不知道合适的关键字 - 因此也无法用谷歌搜索。 基本上...在查看preg_match_all
我想在 TFS 中 check out 一个检入文件的先前版本。我可以轻松获得特定文件的变更集 ID 列表,但无法弄清楚如何 checkout 以前的版本。 我目前的代码: var workspace
我想使用 @FunctionalInterface来 self 代码中的 Java 8,但我希望能够将生成的类文件与 Java 6 一起使用。我认为我应该将源版本设为 1.8 , 目标版本为 1.6
自从 versions 被删除以来,我一直无法找到安装以前版本软件的方法。命令并点击 Homebrew。我在 2008 Mac Pro (3,1) 上运行 macOS 10.14.3 (Mojave)
当我开始当前的项目时,App Store 中已经有一个应用程序。此应用程序仅适用于 iPhone。 我的第一个任务是测试和构建一个也可以在 iPod Touch 上运行的版本。 大约 3 周前,App
我在 GitHub 上有一个曾经是 fork 的 repo,但现在不是了,因为我已经删除了原始项目的任何痕迹并开始了一个同名的新项目。 但是,GitHub 仍然表示该项目是 fork 的。有什么方法可
我是一名优秀的程序员,十分优秀!