【发布时间】:2013-12-01 19:51:47
【问题描述】:
我正在从事与 Windows 系统编程相关的项目。为此,我被指向windows.h。现在我遇到了io.h。它们之间究竟有什么区别?
例如,由于我正在移植一个已经部署在Linux上的应用程序,文件打开函数为open,而在Windows上,如果我使用windows.h,文件打开函数将为CreateFile,并且如果我使用io.h,它将是_open()。
【问题讨论】:
我正在从事与 Windows 系统编程相关的项目。为此,我被指向windows.h。现在我遇到了io.h。它们之间究竟有什么区别?
例如,由于我正在移植一个已经部署在Linux上的应用程序,文件打开函数为open,而在Windows上,如果我使用windows.h,文件打开函数将为CreateFile,并且如果我使用io.h,它将是_open()。
【问题讨论】:
io.h 最初提供了对 Unix 中低级 I/O 原语和相关常量等的声明的访问。由于相当多的代码依赖于它,许多(大多数?)其他系统的编译器提供了同名的头文件,并且一些库函数(至少大部分)像 Unix 中的那样工作。
Windows.h 是(某种意义上)Windows 的粗略模拟——一个头文件,可以访问(声明)Windows 的函数、常量等。最大的不同是,Windows.h 比io.h 所涵盖的基本的低级 I/O 做得更多,而是涵盖了所有的 GUI 功能等。
所以:如果您想编写在类 Unix 系统上以相当低级别执行 I/O 的代码,并且还可以移植到其他系统(如 Windows),您可能想要使用io.h。如果你想专门为 Windows 做系统编程,你几乎肯定想使用windows.h。
【讨论】:
如果您尝试编写可移植代码,您可以使用stdio.h。
Windows.h 包含创建 Windows 应用程序所需的所有头文件(所有基本的 Win32 API 头文件和预处理器指令)。如果您只是想读/写文件,并希望以可移植的方式这样做,那不是您会选择的头文件。
【讨论】:
<stdio.h>(或<cstdio>),但通常最好使用C++ 库。
最终,Windows 上的所有这些不同的 I/O 函数都映射到对 Win32 API 的调用(例如,CreateFile 用于您的特定问题)。所以,如果你想直接使用这个 API,更喜欢 windows.h 。如果您想使用各种(兼容性)包装器,无论是标准 C++ 库、标准 IO 库、POSIX 子系统等...,那么您可以使用其他包含文件。
【讨论】: