uio.h 和 io.h 有什么区别?
what is the difference between uio.h and io.h?
有时我看到编译器抱怨这一行
#include <sys/io.h>
和
fatal error: sys/io.h: No such file or directory
如果我简单地把它改成
#include <sys/uio.h>
它会神奇地起作用。有人可以向我解释其中的区别吗?为什么有些 OSes 有一个而没有另一个?
编辑:此问题发生在 Linux,而不仅仅是 OS X。
一般来说,当编译器找不到 header 时,简单地更改包含的 header 文件的名称是不安全的,甚至是不明智的。 Headers 名字相似,不一定有什么关系。
这里似乎就是这种情况:GLIBC header 文件 sys/io.h
没有声明 POSIX-specified header [的矢量 I/O 函数 sys/uio.h
,至少不是直接的。其实GLIBC也提供了sys/uio.h
。他们是不同的。 C 和 POSIX 都没有提供任何理由相信一个系统上的 sys/uio.h
会提供由该系统或任何其他系统上名为 sys/io.h
的 header 提供的任何声明。
如果你正在尝试构建C代码并且找不到某些header,那么首先要考虑的是include搜索路径,以及header名称是否需要添加路径段或删除。接下来要考虑的是 header 在构建环境中是否完全需要。如果不是,则将 header 更改为实际存在的其他 header 将修复构建,但将完全删除 include
指令也是如此。
我会给它更好的评价,事实上,删除或注释掉这样一个失败的 include
指令,确保警告被启动,并查看编译器随后抱怨的缺失声明(如果有的话)关于。这将为您提供一个句柄,用于确定 header,如果有的话,您应该包括在缺少的地方。
有时我看到编译器抱怨这一行
#include <sys/io.h>
和
fatal error: sys/io.h: No such file or directory
如果我简单地把它改成
#include <sys/uio.h>
它会神奇地起作用。有人可以向我解释其中的区别吗?为什么有些 OSes 有一个而没有另一个?
编辑:此问题发生在 Linux,而不仅仅是 OS X。
一般来说,当编译器找不到 header 时,简单地更改包含的 header 文件的名称是不安全的,甚至是不明智的。 Headers 名字相似,不一定有什么关系。
这里似乎就是这种情况:GLIBC header 文件 sys/io.h
没有声明 POSIX-specified header [的矢量 I/O 函数 sys/uio.h
,至少不是直接的。其实GLIBC也提供了sys/uio.h
。他们是不同的。 C 和 POSIX 都没有提供任何理由相信一个系统上的 sys/uio.h
会提供由该系统或任何其他系统上名为 sys/io.h
的 header 提供的任何声明。
如果你正在尝试构建C代码并且找不到某些header,那么首先要考虑的是include搜索路径,以及header名称是否需要添加路径段或删除。接下来要考虑的是 header 在构建环境中是否完全需要。如果不是,则将 header 更改为实际存在的其他 header 将修复构建,但将完全删除 include
指令也是如此。
我会给它更好的评价,事实上,删除或注释掉这样一个失败的 include
指令,确保警告被启动,并查看编译器随后抱怨的缺失声明(如果有的话)关于。这将为您提供一个句柄,用于确定 header,如果有的话,您应该包括在缺少的地方。