I am looking at the following code in an SO “Low Quality” post to make sure the sample works, and my question is why can’t I print errno’s value?
#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;
}
Here is what happens when I try to print the value:
(gdb) p errno
Cannot find thread-local variables on this target
(gdb)
I can print fp’s value just fine. As you would expect it’s value is 0x00.
I looked at /usr/include/errno.h and a lot of the other include files included as part of errno.h, and I cannot figure out how errno is defined. Any pointers or help would be appreciated. I’m just curious about it; nothing is broken.
Thank you.
In my Ubuntu installation, I have the following section in
bits/errno.h:That said,
errnois not necessarily a variable. For various reasons you may want to have a function returning the error value for you rather than a simpleextern int.1 That is why you can’t print its value using GDB.1 of course, as you can see the function call should return the pointer to the actual variable and the
errnomacro would dereference it.