当前位置: 技术问答>linux和unix
关于linux下errno的实现问题
来源: 互联网 发布时间:2015-07-01
本文导语: 各位大侠: linux下的errno.h仅仅定义了一些错误的Macro,而errno.c文件中仅一行代码: int errno; 我试验了一下,在编写应用程序的时候如果不把errno.h包含进来则程序无法直接对errno 这个变量进行操作,而一但#includ...
各位大侠:
linux下的errno.h仅仅定义了一些错误的Macro,而errno.c文件中仅一行代码:
int errno;
我试验了一下,在编写应用程序的时候如果不把errno.h包含进来则程序无法直接对errno
这个变量进行操作,而一但#include 之后就可以随意更改errno的值,我不明白errno.h之中全部都是Macro,并不存在errno的定义,那么我在我的程序里面修改的那个errno变量的定义到底在哪里,我的程序是如何看见这个变量的?linux内部是如何实现它的。顺便说一句errno.c文件中除了int errno;之外再也没有其他的东西了,莫名其妙啊,这句话应该就是errno的定义所在之处了,问题时他怎么做到的呀
linux下的errno.h仅仅定义了一些错误的Macro,而errno.c文件中仅一行代码:
int errno;
我试验了一下,在编写应用程序的时候如果不把errno.h包含进来则程序无法直接对errno
这个变量进行操作,而一但#include 之后就可以随意更改errno的值,我不明白errno.h之中全部都是Macro,并不存在errno的定义,那么我在我的程序里面修改的那个errno变量的定义到底在哪里,我的程序是如何看见这个变量的?linux内部是如何实现它的。顺便说一句errno.c文件中除了int errno;之外再也没有其他的东西了,莫名其妙啊,这句话应该就是errno的定义所在之处了,问题时他怎么做到的呀
|
其实你从/usr/include/errno.h开始看里面的#include
最后会发现它终究包含了asm/errno.h
而/usr/include/asm/errno.h和源码目录下你看到的那个是一样的。
也就是说,你看到的那个是用户用的errno.h的一部分。
另外:asm/errno.h是一堆errno值究竟是什么的宏定义。
最后会发现它终究包含了asm/errno.h
而/usr/include/asm/errno.h和源码目录下你看到的那个是一样的。
也就是说,你看到的那个是用户用的errno.h的一部分。
另外:asm/errno.h是一堆errno值究竟是什么的宏定义。
|
/usr/src/linux下面的那些头文件好像编译内核用的,
应用程序一般不用这里的头文件
应用程序一般不用这里的头文件
|
/usr/include/errno.h
用户用头文件
用户用头文件