gpt4 book ai didi

c - 为什么errno的值打印不出来?

转载 作者:太空狗 更新时间:2023-10-29 16:31:39 26 4
gpt4 key购买 nike

我正在查看 SO“低质量”帖子中的以下代码以确保示例有效,我的问题是为什么我不能打印 errno 的值?

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main(){
FILE *fp;
errno = 0;
fp=fopen("Not_exist.txt","r");
if(fp == NULL && errno == ENOENT)
perror("file not exist");
return 0;
}

这是我尝试打印值时发生的情况:

(gdb) p errno
Cannot find thread-local variables on this target
(gdb)

我可以很好地打印 fp 的值。如您所料,它的值为 0x00

我查看了 /usr/include/errno.h 以及作为 errno.h 的一部分包含的许多其他包含文件,但我不知道如何错误号已定义。任何指示或帮助将不胜感激。我只是对此感到好奇;什么都没有坏。

谢谢。

最佳答案

errno 变量有点奇怪。因为现在大多数运行时库都支持线程,所以不能只有 一个 errno 变量。如果有,那么两个线程可以同时执行同时设置 errno 值的操作,随之而来的是极大的困惑。

运行时库使用各种技巧来避免这个问题。例如,一个人可能会做这样的事情:

#define errno __get_errno()

其中对 errno 的引用实际上调用了内部 __get_errno() 函数,该函数返回当前线程的正确错误编号值。此方法的缺点是它阻止了对 errno 的赋值,例如 errno = 0;(某些代码可能会这样做)。运行时库通常会选择更复杂的方法。

某些运行时库(我想就像您正在使用的库)可以声明一种特殊类型的“线程局部变量”,它可以在每个线程上具有不同的值。听起来您系统上的调试器无法显示那种变量。

关于c - 为什么errno的值打印不出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495720/

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