Системное программирование в среде Windows
Шрифт:
Область | 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
|
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 | Используйте второй промежуточный бит каталога | – |
Область | Windows | UNIX | Библиотека С | Примечания |
---|---|---|---|---|
Асинхронный ввод/вывод | GetOverlappedResult | – | – | |
Асинхронный ввод/вывод | ReadFileEx | – | – | Расширенный ввод/ вывод с процедурой завершения |
Асинхронный ввод/вывод | SleepEx | – | – | Ожидание в дежурном режиме |
Асинхронный ввод/вывод | WaitForMultipleObjects (в данном случае ожидание дескрипторов файлов) | poll, select | – | |
Асинхронный ввод/вывод | WaitForMultipleObjectsEx | – | – | Ожидание в дежурном режиме |
Асинхронный ввод/вывод | WriteFileEx | – | – | Расширенный ввод/ вывод с процедурой завершения |
Асинхронный ввод/вывод | WaitForSingleObjectEx | waitpid | – | Ожидание в дежурном режиме |
Область | 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 | – |
ПРИЛОЖЕНИЕ
Результаты измерения производительности
В примерах программ представлено широкое разнообразие альтернативных методик решения одних и тех же задач, как это было, например, при рассмотрении копирования файлов или преобразования текстовых файлов из кодировки ASCII в Unicode, и поэтому рассуждения о сравнительных преимуществах этих методик в отношении производительности являются вполне уместными. Однако в процессе создания приложений одних рассуждений подобного рода мало, и требуется точное знание количественных характеристик, позволяющих судить о влиянии того или иного выбора варианта реализации на производительность, а также о том, каковы в этом смысле потенциальные преимущества той или иной версии Windows, конфигурации оборудования или средств Windows, таких как потоки или асинхронный ввод/вывод. Программа timep (программа 6.2) позволяет измерять реальное (истекшее), пользовательское и системное (затраченное функциями ядра) время, необходимое для выполнения программ, и предоставляет удобный способ измерения производительности и определения ее зависимости от выбора методик и принципов программирования.
Тестовые конфигурации
Тестирование производилось путем выполнения на ряде хост-систем репрезентативного набора приложений из числа приведенных в данной книге примеров программ.
Приложения
В приведенных ниже таблицах приведены временные характеристики, полученные с использованием программы timep при выполнении тестовых программ на нескольких различных системах. Для этой цели были выбраны следующие функциональные области:
1. Копирование файлов. Показатели производительности определялись для нескольких различных методик, с помощью которых выполнялась эта операция, включая использование библиотеки С и Windows-функции CopyFile. Копирование файлов позволяет сосредоточить внимание на операциях ввода/вывода, не сопровождаемых обработкой данных.
2. Преобразование символов из кодировки ASCII в кодировку Unicode. В этой серии тестов выяснялась зависимость производительности от использования отображения файлов, буферов большого размера, флагов Windows, задающих последовательный режим обработки, и операций асинхронного ввода/вывода. Преобразование символов позволяет сосредоточить внимание на операциях ввода/вывода, сопровождаемых незначительной обработкой данных в процессе их перемещения из одного буфера в другой.