ПРИЛОЖЕНИЕ Б Сопоставление функций Windows, UNIX и библиотеки С

ПРИЛОЖЕНИЕ Б

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

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

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

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

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

• Имя функции 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* - Поиск следующих файлов, соответствующих шаблону Управление каталогами GetCurrentDirectory getcwd* - Управление каталогами GetFullPathName - - Управление каталогами GetSystemDirectory Известные пути доступа - Управление каталогами RemoveDirectory rmdir, unlink* remove Управление каталогами SearchPath Используйте opendir, readdir - Поиск указанного файла по указанному пути Управление каталогами SetCurrentDirectory chdir*, fchdir - Смена рабочего каталога Обработка ошибок FormatMessage strerror perror Обработка ошибок GetLastError errno errno Глобальная переменная Обработка ошибок SetLastError errno errno Глобальная переменная Блокирование файлов LockFile fcntl(cmd=F_GETLK,…) - Блокирование файлов LockFileEx fcntl(cmd=F_GETLK,…) - Блокирование файлов UnlockFile fcntl(cmd=F_GETLK,…) - Блокирование файлов UnlockFileEx fcntl(cmd=F_GETLK,…) - Файловая система CloseHandle (в данном случае закрытие дескриптора файла) close* fclose CloseHandle не ограничивается файлами Файловая система CopyFile open; read; write; close fopen; fread; fwrite; fclose Дублирование файла Файловая система CreateFile open*, creat* fopen Открытие/ создание файла Файловая система DeleteFile unlink* remove Удаление файла Файловая система FlushFileBuffers fsynch fflush Запись буферизованных данных в файл Файловая система GetFileAttributes stat*, fstat*, lstat - Файловая система GetFileInformationByHandle stat*, fstat*, lstat - Заполнение структуры информацией о файле Файловая система GetFileSize stat*, fstat*, lstat ftell, fseek Получение размера файла в байтах Файловая система  GetFileTime stat*, fstat*, lstat - Файловая система GetFileType stat*, fstat*, lstat - Определение типа устройства или файла Файловая система GetStdHandle Используйте файловые дескрипторы 0, 1 или 2 Используйте stdin, stdout, stderr Файловая система GetTempFileName Используйте библиотеку С tmpnam Создание уникального имени файла Файловая система GetTempFileName, CreateFile Используйте библиотеку С tmpfile Создание временного файла Файловая система GetTempPath /temp path - Получение пути к каталогу для временных файлов Файловая система MoveFile, MoveFileEx Используйте библиотеку С rename Переименование файла или каталога Файловая система CreateHardLink link, unlink* - Windows не поддерживает ссылки Файловая система - symlink - Создание символической ссылки Файловая система - readlink - Чтение имени в символической ссылке Файловая система Отсутствует; ReadFile возвращает 0 байт Отсутствует; read возвращает 0 байт feof Количество оставшихся до конца файла байтов Файловая система Отсутствует; используйте многократные вызовы ReadFile readv Отсутствует; используйте многократные вызовы freads Фрагментированное чтение Файловая система Отсутствует; используйте многократные вызовы WriteFile writev Отсутствует; используйте многократные вызовы fwrites Запись со слиянием Файловая система ReadFile read fread Чтение данных из файла Файловая система SetEndOfFile chsize* - Файловая система SetFileAttributes fcntl - Файловая система SetFilePointer lseek fseek Установка указателя файла Файловая система SetFilePointer (установка в 0) lseek(0) rewind Файловая система SetFileTime utime* - Файловая система SetStdHandle close, dup*, dup2* или fcntl freopen dup2 или fcntl Файловая система WriteFile write fwrite Запись данных в файл Получение сведений о системе GetDiskFreeSpace - - Получение сведений о системе GetSystemInfo getrusage - Получение сведений о системе GetVersion uname - Получение сведений о системе GetVolumeInformation - - Получение сведений о системе GlobalMemoryStatus getrlimit - Получение сведений о системе Ряд предопределенных констант sysconf, pathconf, fpathconf - Дата и время GetSystemTime Используйте библиотеку С time, gmtime Дата и время См. программу ls (Программа 3.2) Используйте библиотеку С asctime Дата и время CompareFileTime Используйте библиотеку С difftime Сравнение "календарных" значений даты и времени Дата и время FileTimeToLocalFileTime, FileTimeToSystemTime Используйте библиотеку С localtime Дата и время FileTimeToSystemTime Используйте библиотеку С gmtime Дата и время GetLocalTime Используйте библиотеку С time, localtime Дата и время См. программу touch (программа 3.3) Используйте библиотеку С strftime Дата и время SetLocalTime - - Дата и время SetSystemTime - - Дата и время Вычитание значений отметок времени Используйте библиотеку С difftime Дата и время SystemTimeToFileTime Используйте библиотеку С mktime

Глава 4: обработка исключений

Область Windows UNIX Библиотека С SEH __try–__except Используйте сигналы библиотеки С Используйте сигналы библиотеки С SEH __try–__finally Используйте сигналы библиотеки С Используйте сигналы библиотеки С SEH AbnormalTermination Используйте сигналы библиотеки С Используйте сигналы библиотеки С SEH GetExceptionCode Используйте сигналы библиотеки С Используйте сигналы библиотеки С SEH RaiseException Используйте сигналы библиотеки С signal, raise Сигналы Используйте блок __finally Используйте библиотеку С atexit Сигналы Используйте библиотеку С или TerminateProcess kill raise Сигналы Используйте библиотеку С Используйте библиотеку С signal Сигналы Используйте SEH, VEH sigemptyset - Сигналы Используйте SEH, VEH sigfillset - Сигналы Используйте SEH, VEH sigaddset - Сигналы Используйте SEH, VEH sigdelset - Сигналы Используйте SEH, VEH sigismember - Сигналы Используйте SEH, VEH sigprocmask - Сигналы Используйте SEH, VEH sigpending - Сигналы Используйте SEH, VEH sigaction - Сигналы Используйте SEH, VEH sigsetjmp - Сигналы Используйте SEH, VEH siglongjmp - Сигналы Используйте SEH, VEH sigsuspendf - Сигналы Используйте SEH, VEH psignal - Сигналы Используйте SEH, VEH или библиотеку С Используйте библиотеку С abort

Примечание. Многие поставщики систем UNIX предоставляют собственные средства обработки исключений.

Глава 5: управление памятью, отображение файлов и библиотеки DLL

Область Windows UNIX Библиотека С Отображение файлов CreateFileMapping shmget - Отображение файлов MapViewOfFile mmap, shmat - Отображение файлов MapViewOfFileEx mmap, shmat - Отображение файлов OpenFileMapping shmget - Отображение файлов UnmapViewOfFile munmap, shmdt, shmctl - Управление памятью GetProcessHeap - - Управление памятью GetSystemInfo - - Управление памятью HeapAlloc sbrk, brk или библиотека С malloc, calloc Управление памятью HeapCreate - - Управление памятью HeapDestroy - - Управление памятью HeapFree Используйте библиотеку С free Управление памятью HeapReAlloc Используйте библиотеку С realloc Управление памятью HeapSize - - Разделяемая память CloseHandle (в данном случае закрытие дескриптора объекта отображения файла)  shmctl - Разделяемая память CreateFileMapping, OpenFileMapping shmget - Разделяемая память MapViewOfFile shmat - Разделяемая память UnmapViewOfFile shmdt - Библиотеки DLL LoadLibrary dlopen - Библиотеки DLL FreeLibrary dlclose - Библиотеки DLL GetProcAddress dlsyn - Библиотеки DLL DllMain pthread_once -

Глава 6: управление процессами

Область Windows UNIX Библиотека С Примечания Управление процессами CreateProcess fork(); execl()*, system() - Существует 6 функций ехесхх Управление процессами ExitProcess _exit exit Управление процессами GetCommandLine argv[] argv[] Управление процессами GetCurrentProcess getpid* - Управление процессами GetCurrentProcessId getpid* - Управление процессами GetEnvironmentStrings  - getenv Управление процессами GetEnvironmentVariable - getenv Управление процессами GetExitCodeProcess wait, waitpid - Управление процессами GetProcessTimes times, wait3, wait4 - Управление процессами GetProcessWorkingSetSize wait3, wait4 - Управление процессами - execl*,execv*,execle*,execve*,execlp*,execvp* - В Windows прямой эквивалент отсутствует Управление процессами - fork, vfork - В Windows прямой эквивалент отсутствует Управление процессами - getppid - Отношения "предок/потомок" в Windows отсутствуют Управление процессами - getgid, getegid - Понятие группы процессов в Windows отсутствует Управление процессами - getpgrp - Управление процессами - setpgid - Управление процессами - setsid - Управление процессами - tcgetpgrp - Управление процессами - tcsetpgrp - Управление процессами OpenProcess  - - Управление процессами SetEnvironmentVariable putenv - putenv не включена в стандартную библиотеку С Управление процессами TerminateProcess kill - Синхронизация: процесс WaitForMultipleObjects (в данном случае ожидание дескрипторов процесса) waitpid - Синхронизация: процесс WaitForSingleObject (в данном случае ожидание дескриптора процесса) wait, waitpid - Таймеры KillTimer alarm(0) - Таймеры SetTimer alarm - Таймеры Sleep sleep - Таймеры Sleep poll или select без указания файлового дескриптора -

Глава 7: Потоки и планирование выполнения

Область Windows UNIX/Pthreads Примечания Управление потоками CreateRemoteThread - TLS TlsAlloc pthread_key_alloc TLS TlsFree pthread_key_delete TLS TlsGetValue pthread_getspecific TLS TlsSetValue pthread_setspecific Управление потоками CreateThread, _beginthreadex pthread_create Управление потоками ExitThread, _endthreadex pthread_exit Управление потоками GetCurrentThread pthread_self Управление потоками GetCurrentThreadId - Управление потоками GetExitCodeThread pthread_yield Управление потоками ResumeThread - Управление потоками SuspendThread - Управление потоками TerminateThread pthread_cancel pthread_cancel является более безопасной Управление потоками WaitForSingleObject (в данном случае ожидание дескриптора потока) pthread_join Приоритет потоков GetPriorityClass pthread_attr_getschedpolicy, getpriority Приоритет потоков GetThreadPriority pthread_attr_getschedparam Приоритет потоков SetPriorityClass pthread_attr_setschedpolicy, setpriority, nice Приоритет потоков SetThreadPriority pthread_attr_setschedparam

Примечание. Будучи частью всех современных систем UNIX, потоки Pthreads доступны также в системах, отличных от UNIX.

Главы 8-10: синхронизация потоков

Область Windows UNIX/Pthreads Примечания Синхронизация: критические разделы DeleteCriticalSection Для эмуляции объектов критических разделов используйте мьютексы. Библиотека С в данном случае не применима Синхронизация: критические разделы EnterCriticalSection Некоторые системы предоставляют собственные эквиваленты. Библиотека С в данном случае не применима Синхронизация: критические разделы InitializeCriticalSection ? Синхронизация: критические разделы LeaveCriticalSection Синхронизация: события CloseHandle (в данном случае закрытие дескриптора события) pthread_cond_destroy Синхронизация: события CreateEvent pthread_cond_init Синхронизация: события PulseEvent pthread_cond_signal Вручную сбрасываемое событие Синхронизация: события ResetEvent - Синхронизация: события SetEvent pthread_cond_broadcast Автоматически сбрасываемое событие Синхронизация: события WaitForSingleObject (в данном случае ожидание дескриптора события) pthread_cond_wait Синхронизация: события WaitForSingleObject (в данном случае ожидание дескриптора события) pthread_timed_wait Синхронизация: мьютексы CloseHandle (в данном случае закрытие дескриптора мьютекса) pthread_mutex_destroy Синхронизация: мьютексы CreateMutex pthread_mutex_init Синхронизация: мьютексы ReleaseMutex pthread_mutex_unlock Синхронизация: мьютексы WaitForSingleObject(в данном случае ожидание дескриптора мьютекса) pthread_mutex_lock Синхронизация: семафоры CreateSemaphore semget Синхронизация: семафоры - semctl Непосредственная поддержка всех опций в Windows отсутствует Синхронизация: семафоры OpenSemaphore semget Синхронизация: семафоры ReleaseSemaphore semop (+) Синхронизация: семафоры WaitForSingleObject (в данном случае закрытие дескриптора семафора) semop (-) Windows может выполнять ожидание только одного счетчика

Глава 11: Взаимодействие между процессами

Область Windows UNIX Библиотека С Примечания IPC CallNamedPipe - - CreateFile, WriteFile, ReadFile, CloseHandle IPC CloseHandle (pipe handle) close, msgctl pclose IPC ConnectNamedPipe - - IPC CreateMailslot - - IPC CreateNamedPipe mkfifo, msgget - IPC CreatePipe pipe popen He является частью стандартной библиотеки С — см. [40] IPC DuplicateHandle dup, dup2, or fcntl - Или используйте стандартные имена файлов CONIN$, CONOUT$ IPC GetNamedPipeHandleState stat, fstat, lstat64 - IPC GetNamedPipeInfo stat, fstat, lstat - IPC ImpersonateNamedPipeClient - - IPC PeekNamedPipe - - IPC ReadFile (в данном случае используется дескриптор именованного канала) read (fifo), msgsnd - IPC RevertToSelf - - IPC SetNamedPipeHandleState - - IPC TransactNamedPipe - - WriteFile; ReadFile IPC WriteFile (в данном случае используется дескриптор именованного канала) write (fifo), msgrcv - Разное GetComputerName uname - Разное SetComputerName - - Безопасность SetNamedPipeIdentity Используйте второй промежуточный бит каталога -

Глава 14: асинхронный ввод/вывод

Область Windows UNIX Библиотека С Примечания Асинхронный ввод/вывод GetOverlappedResult - - Асинхронный ввод/вывод ReadFileEx - - Расширенный ввод/ вывод с процедурой завершения Асинхронный ввод/вывод SleepEx - - Ожидание в дежурном режиме Асинхронный ввод/вывод WaitForMultipleObjects (в данном случае ожидание дескрипторов файлов) poll, select - Асинхронный ввод/вывод WaitForMultipleObjectsEx - - Ожидание в дежурном режиме Асинхронный ввод/вывод WriteFileEx - - Расширенный ввод/ вывод с процедурой завершения Асинхронный ввод/вывод WaitForSingleObjectEx waitpid - Ожидание в дежурном режиме

Глава 15: Безопасность объектов Windows

Область Windows UNIX Примечания Безопасность AddAccessAllowedAce chmod, fchmod Средства защиты объектов библиотекой С не поддерживаются Безопасность AddAccessDeniedAce chmod, fchmod Безопасность AddAuditAce - Безопасность CreatePrivateObjectSecurity - Безопасность DeleteAce chmod, fchmod ? Безопасность DestroyPrivateObjectSecurity - Безопасность GetAce stat*, fstat*, lstat Безопасность GetAclInformation stat*, fstat*, lstat Безопасность GetFileSecurity stat*, fstat*, lstat Безопасность GetPrivateObjectSecurity - Безопасность GetSecurityDescriptorDacl stat*, fstat*, lstat Безопасность GetUserName getlogin Безопасность InitializeAcl - Безопасность InitializeSecurityDescriptor umask Безопасность LookupAccountName getpwnam, getgrnam Безопасность LookupAccountSid getpwuid, getuid, geteuid Безопасность - getpwend, setpwent, endpwent Безопасность - getgrent, setgrent, endgrent Безопасность - setuid, seteuid, setreuid Безопасность - setgid, setegid, setregid Безопасность OpenProcessToken getgroups, setgroups, initgroups Безопасность SetFileSecurity chmod*, fchmod Безопасность SetPrivateObjectSecurity - Безопасность SetSecurityDescriptorDacl umask Безопасность SetSecurityDescriptorGroup chown, fchown, lchown Безопасность SetSecurityDescriptorOwner chown, fchown, lchown Безопасность SetSecurityDescriptorSacl -