Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Сопоставление функций 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 -





Поделиться с друзьями:


Дата добавления: 2015-09-20; Мы поможем в написании ваших работ!; просмотров: 438 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Настоящая ответственность бывает только личной. © Фазиль Искандер
==> читать все изречения...

2364 - | 2087 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.