2013-11-18 1 views
6

Я работаю над проектом, связанным с системным программированием в Windows. Для этого я указал на windows.h. Теперь я столкнулся с io.h. В чем же разница между ними?В каких условиях я должен использовать io.h для windows.h?

Например, так как я портирование приложения, которое уже развернуто на Linux, файл открыта функция open в то время как на Windows, если я использую windows.h, файл открыта функция будет CreateFile, и если я использую io.h, это будет _open().

ответ

6

io.h Первоначально предоставлялся доступ к объявлениям для примитивов ввода-вывода низкого уровня в Unix и связанных с ними константах. Поскольку от этого зависел совсем немного кода, многие (большинство?) Компиляторов для других систем предоставляли заголовок с тем же именем и некоторые библиотечные функции, которые работали (по крайней мере, в основном), как и в Unix.

Windows.h является (своего рода) грубым аналогом для Windows - заголовком, который предоставляет доступ к (декларациям) для функций, констант и т. Д. Для Windows. Большая разница заключается в том, что Windows.h делает намного больше, чем базовый, низкоуровневый ввод-вывод, охватываемый io.h, вместо этого охватывает все функции графического интерфейса и т. Д.

Итак: если вы хотите написать код, который делает I/O на довольно низком уровне в Unix-подобных системах и может также переноситься в другие системы, такие как Windows, вы, вероятно, захотите использовать io.h. Если вы хотите сделать системное программирование специально для Windows, вы почти наверняка захотите использовать windows.h.

4

В конечном счете, все эти различные функции ввода/вывода на карте Windows вызывают вызовы в API Win32 (например, CreateFile для вашего конкретного вопроса). Итак, если вы хотите использовать этот API напрямую, предпочитайте windows.h. Если вы хотите использовать различные (совместимые) обертки, будь то стандартная C++ lib, стандартная IO lib, подсистема POSIX и т. Д., Тогда вы можете использовать другие включенные файлы.

4

Если вы пытаетесь написать переносимый код, вы должны использовать stdio.h.

В Windows.h включены все заголовки, необходимые для создания приложения Windows (все основные заголовки API Win32 и директивы препроцессора). Если вы просто ищете для чтения/записи файлов и хотите сделать это переносимым образом, это не файл заголовка, который вы бы выбрали.

+1

Вопрос с меткой C++. Вы * можете * использовать '' (или ''), но обычно лучше использовать библиотеку C++. –

Смежные вопросы