【发布时间】:2023-04-07 02:06:01
【问题描述】:
查看pthread_* 函数的文档,例如pthread_rwlock_destroy 和许多其他函数,文档是这样写的:
返回值
如果成功,pthread_rwlock_destroy() 和 pthread_rwlock_init() 函数将返回零;否则,将返回错误号以指示错误。
[EBUSY] 和 [EINVAL] 错误检查,如果实施,就好像它们在函数处理开始时立即执行,并在修改由指定的读写锁的状态之前导致错误返回rwlock。
这表示如果发生错误,一个错误号应该被返回。然后,它解释了错误代码:
错误
如果出现以下情况,pthread_rwlock_destroy() 函数可能会失败:
[忙]
实现检测到尝试在锁定时销毁 rwlock 引用的对象。
...
其中没有提到是返回EBUSY 本身还是返回-EBUSY。当函数返回错误代码时,几乎在所有我看到的地方,它们都会返回-E*****。
这是否意味着pthread_* 函数也遵循这个约定?我应该对照-EBUSY 或EBUSY 本身检查返回值吗?
在同一主题上,他们会将EBUSY 存储在errno 或-EBUSY 中吗?
【问题讨论】:
-
EBUSY != -EBUSY.. 我不明白负数的来源。 -
与内核实现细节混淆。
-
@pst,
EBUSY != -EBUSY,因此您需要知道返回的是EBUSY还是-EBUSY。通常错误代码被定义为正数,然后在它们后面加上一个减号。所以......负数出现在他们放置-的位置?还是我完全误解了你的评论? -
您既不应该检查
>0也不应该检查<0,而应该检查!=0...如果没有成功,那一定是失败了! ;-) -
@alk,叹息……是的。然后你想检查它失败的原因,即你应该对照
EBUSY或-EBUSY检查返回值。我在问哪个是正确的。
标签: c pthreads errno error-code