Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C dlopen()是否设置了errno?_C_Linux_Dlopen - Fatal编程技术网

C dlopen()是否设置了errno?

C dlopen()是否设置了errno?,c,linux,dlopen,C,Linux,Dlopen,一切都在标题里。手册页什么也没说。一些谷歌报告说,有人在dlopen之后检查errno,但很少有人检查,结果也不尽相同。函数确实返回成功/不成功值,但如何找出失败的原因呢 dlopen()是否设置了errno?那么,在哪里定义了不同的errno值呢? 如果不是,应该用什么来检查故障的原因?(重点添加) 成功完成后,dlopen()将返回一个符号表句柄。如果无法找到文件、无法打开读取文件、文件格式不适合dlopen()处理,或者在加载文件或重新定位其符号引用的过程中发生错误,dlopen()应返回

一切都在标题里。手册页什么也没说。一些谷歌报告说,有人在dlopen之后检查errno,但很少有人检查,结果也不尽相同。函数确实返回成功/不成功值,但如何找出失败的原因呢

dlopen()
是否设置了errno?那么,在哪里定义了不同的errno值呢? 如果不是,应该用什么来检查故障的原因?

(重点添加)

成功完成后,dlopen()将返回一个符号表句柄。如果无法找到文件、无法打开读取文件、文件格式不适合dlopen()处理,或者在加载文件或重新定位其符号引用的过程中发生错误,dlopen()应返回空指针更详细的诊断信息可通过获得


正如其他人所指出的,没有任何东西禁止
dlopen()
(或者更可能是
dlopen()
调用的函数)修改
errno
。但是符合标准的
dlopen()
不会通过
errno
报告其自身的错误。您需要调用
dlerror()

(添加了强调)

成功完成后,dlopen()将返回一个符号表句柄。如果无法找到文件、无法打开读取文件、文件格式不适合dlopen()处理,或者在加载文件或重新定位其符号引用的过程中发生错误,dlopen()应返回空指针更详细的诊断信息可通过获得



正如其他人所指出的,没有任何东西禁止
dlopen()
(或者更可能是
dlopen()
调用的函数)修改
errno
。但是符合标准的
dlopen()
不会通过
errno
报告其自身的错误。您需要调用
dlerror()

man dlopen
清楚地告诉我们关于
dlerror
…设置
errno
不同于影响
errno
。调用
dlopen()
可以更改
errno
的值。例如,
open()
调用可能由于
dlopen()而失败
尝试查找库。我投票将此问题作为主题外的问题结束,因为OP懒得阅读
dlopen
man dlopen
的手册页,它清楚地告诉我们关于
dlerror
…设置
errno
不同于影响
errno
。调用
dlopen()
可以更改
errno
的值。例如,
open()
调用可能会失败,因为
dlopen()
尝试查找库。我投票关闭这个问题,因为OP懒得阅读
dlopen
的手册页。好的,错过了我不知道的关于dlerror的手册部分。感谢Andrew的评论,这当然可以解释为什么我觉得在errno改变的时候我走上了正轨……就我个人而言,我喜欢遵循POSIX,这对我来说意味着检查Open Group的网站,而不是简单地使用本地手册页。诚然,尽管大多数手册页遵循一种模式,但它们并没有标准化,因此错误信息可能在其自己的部分,或者可能在“返回值”部分。这个答案忽略了一个事实,即虽然
dlopen
没有设置(分配有意义的值)到
errno
,但是,允许使用除零以外的任何值对
errno
进行重击(就像所有其他未明确禁止这样做的函数一样),好的,错过了关于dlerror的主要部分,我不知道。感谢Andrew的评论,这当然可以解释为什么我觉得在errno改变的时候我走上了正轨……就我个人而言,我喜欢遵循POSIX,这对我来说意味着检查Open Group的网站,而不是简单地使用本地手册页。诚然,尽管大多数手册页遵循一种模式,但它们并没有标准化,因此错误信息可能在其自己的部分,或者可能在“返回值”部分。这个答案忽略了一个事实,即虽然
dlopen
没有设置(分配有意义的值)到
errno
,但是,允许使用除零以外的任何值对
errno
进行重击(就像所有其他未明确禁止的函数一样)。