Чтение онлайн

ЖАНРЫ

Системное программирование в среде Windows

Харт Джонсон М.

Шрифт:
Программа А.9. Функция GetArgs 

/* GetArgs. Преобразует командную строку к виду argc/argv. */

#include "EvryThng.h"

VOID GetArgs(LPCTSTR Command, int *pArgc, LPTSTR argstr[]) {

 int i, icm = 0;

 DWORD ic = 0;

 for (i = 0; ic < _tcslen(Command); i++) {

while (ic < _tcslen(Command) && Command[ic] != TSPACE && Command [ic] != TAB) {

argstr[i][icm] = Command[ic];

ic++;

icm++;

}

argstr[i][icm] = '\0';

while (ic < _tcslen(Command) && (Command[ic] == TSPACE || Command[ic] == TAB)) ic++;

icm = 0;

 }

 if (pArgc != NULL) *pArgc = i;

 return;

}
 

ПРИЛОЖЕНИЕ

Б

Сопоставление функций Windows, UNIX и библиотеки С

В этом приложении приводятся таблицы, в которых представлены функции Windows (Win32 и Win64), описанные в основном тексте, а также сопоставимые с ними функции UNIX/Linux [36] и стандартной библиотеки ANSI С, если таковые имеются.

Таблицы расположены в порядке следования глав (некоторые таблицы объединяют данные, относящиеся к нескольким главам). В пределах каждой главы данные в таблицах отсортированы сначала в соответствии с их функциональным назначением (файловая система, управление каталогами и так далее), а затем по именам функций Windows.

36

Точнее говоря, "UNIX" означает функции стандарта POSIX, описанные в спецификации The Single UNIX Specification . Эта спецификация реализуется в UNIX и Linux. В свою очередь, исторически эта спецификация возникла на основе UNIX. 

В каждой из строк таблицы представлена следующая информация:

• Функциональная область (категория).

• Имя функции Windows.

• Имя соответствующей функции UNIX. В некоторых случаях существует несколько таких функций.

• Имя соответствующей функции библиотеки С, если таковая имеется.

Используемые в таблицах обозначения нуждаются в некоторых пояснениях.

• В библиотеке функций Microsoft Visual C++ содержатся некоторые функции, совместимые с UNIX. Так, функция _open является функцией библиотеки совместимости, эквивалентной UNIX-функции open. Выделение имени функции UNIX курсивом означает, что эта функция является совместимой. Символ звездочки в конце имени функции указывает на существование версии функции, ориентированной на работу с расширенными символами UNICODE. Так, существует функция _wopen.

• Программа, в которой используются только функции стандартной библиотеки С и отсутствуют вызовы функций Windows или UNIX, должны компилироваться, компоноваться и выполняться в обеих системах. В то же время, возможности такой программы в отношении работы с файлами и выполнения операций ввода/вывода будут ограниченными.

• Функция, следующая за разделительной запятой, является альтернативной версией, часто использующей другие характеристики или эмулирующей какой-то один из аспектов функции Windows.

• Разделение функций символом точки с запятой указывает на то, что эмуляция функции Windows достигается за счет последовательного использования этих функций. Так, функции CreateProcess соответствуют функции fork; exec.

• Подчеркивание имени элемента указывает на глобальную переменную, например errno.

• В некоторых случаях UNIX-эквивалент указывается в обобщенной форме с использованием такой, например, терминологии, как "функции терминального ввода/вывода" в случае Windows-функции AllocConsole. Часто приводится только соответствующий простой комментарий наподобие "Используйте библиотеку С", как это сделано в случае функции GetTempFileName. В других случаях ситуация обращается. Так, для функций управления сигналами в UNIX (функция sigaddset и подобные ей) в столбце "Windows"

содержатся записи "Используйте SEH, VEH", означающие, что для обеспечения желаемого поведения программы программист должен установить структурные или векторные обработчики исключений и функции фильтров. В отличии от UNIX, группы процессов в Windows не поддерживаются, и в подобных случаях в столбце "Windows" ставится прочерк, что, впрочем, не помешало нам эмулировать отношения между процессами при управлении заданиями в главе 6.

• Многочисленные прочерки, особенно, когда они относятся к библиотеке С, встречаются в тех случаях, когда сопоставимые функции или наборы функций отсутствуют. Именно такая ситуация наблюдается, например, для функций управления каталогами.

• В таблицах к главам 7—10 в качестве функций UNIX фигурируют функции потоков POSIX (Pthreads), хотя они и не являются частью UNIX. Кроме того, хотя во многих реализациях UNIX имеются собственные объекты синхронизации, аналогичные событиям, мьютексам и семафорам, мы не пытались отразить их в таблицах.

Как правило, более точная совместимость наблюдается для функций, фигурирующих в начальных главах книги, особенно для функций управления файлами. С переходом к более развитым функциональным возможностям различия между системами становятся все более ощутимыми, и во многих случаях эквивалентные функции библиотеки С отсутствуют. Так, модели безопасности в UNIX и Windows существенно отличаются друг от друга, и поэтому отображенные соотношения между ними являются, в лучшем случае, приближенными.

Указанные функциональные соответствия не являются точными. Между всеми тремя системами имеется множество отличий, как существенных, так и незначительных. Поэтому данные таблицы могут служить лишь ориентиром. Многие из отмеченных отличий отдельно обсуждаются в главах книги.

Главы 2 и 3: управление файлами и каталогами
Поделиться с друзьями:
Область Windows UNIX Библиотека С Примечания
Консольный ввод/вывод AllocConsole Терминальный ввод/вывод
Консольный ввод/вывод FreeConsole Терминальный ввод/вывод
Консольный ввод/вывод ReadConsole read getc, scanf, gets
Консольный ввод/вывод SetConsoleMode ioctl
Консольный ввод/вывод WriteConsole write putc, printf, puts
Управление каталогами CreateDirectory mkdir* Создание нового каталога
Управление каталогами FindClose closedir* Закрытие дескриптора поиска
Управление каталогами FindFirstFile opendir*, readdir* Поиск первого файла, соответствующего шаблону
Управление каталогами FindNextFile readdir* Поиск следующих файлов, соответствующих шаблону