В этом приложении приводятся таблицы, в которых представлены функции 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 (в данном случае закрытие дескриптора файла)
Примечание. Многие поставщики систем 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
-
Примечания:
3
Замечания, сделанные в адрес UNIX, в равной степени относятся также к Linux и некоторым другим системам, поддерживающим POSIX API.
36
Точнее говоря, "UNIX" означает функции стандарта POSIX, описанные в спецификации The Single UNIX Specification (http://www.opengroup.org/onlinepubs/007908799/). Эта спецификация реализуется в UNIX и Linux. В свою очередь, исторически эта спецификация возникла на основе UNIX.