gpt4 book ai didi

c - uio.h 和 io.h 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 11:03:58 30 4
gpt4 key购买 nike

有时我看到编译器提示这一行

#include <sys/io.h>

fatal error: sys/io.h: No such file or directory

如果我简单地把它改成

#include <sys/uio.h>

它会神奇地起作用。有人可以向我解释其中的区别吗?为什么有些操作系统有一个而没有另一个?

编辑:这个问题发生在 Linux 上,而不仅仅是 OS X。

最佳答案

一般来说,当编译器找不到头文件时,简单地更改被包含的头文件的名称是不安全的,甚至是不明智的。具有相似名称的 header 之间不一定有任何关系。

这似乎是这里的情况:GLIBC 头文件 sys/io.h 没有声明 POSIX 指定的头文件 sys/uio.h 的 vector I/O 函数,至少不是直接的。其实GLIBC也提供了sys/uio.h。他们是不同的。 C 和 POSIX 都没有提供任何理由相信一个系统上的 sys/uio.h 会提供由名为 sys/io.h 的 header 提供的任何声明或任何其他系统。

如果您正在尝试构建 C 代码并且找不到某些 header ,那么首先要考虑的是包含搜索路径,以及 header 名称是否需要添加或删除路径段。接下来要考虑的是构建环境中是否完全需要该 header 。如果不是,则更改 header 以命名实际存在的其他 header 将修复构建,但同时删除 include 指令也是如此。

我会给它更好的评价,事实上,删除或注释掉这样一个失败的 include 指令,确保警告被启动,然后看看编译器遗漏了哪些声明(如果有的话)提示。这将为您提供一个句柄,用它来确定应该包含哪个 header (如果有)来代替缺失的 header 。

关于c - uio.h 和 io.h 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33135596/

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