Re: libpthreads,libmpeg3 -> windows

From
Alexander Pevzner ()
To
Boris Rudakov ()
Date
2003-06-13T06:04:06Z
Area
CARBON.COPY
 * Forwarded from area 'RU.UNIX.PROG'
From: Alexander Pevzner <pzz@pzz.msk.ru>

Hello, Boris Rudakov!

Thu, 12 Jun 2003 23:28:56 +0400 you wrote to Vladimir V. Ivanov:

BR> Чисто вкратце (если более интересно - в SU.WINDOWS.PROG)

BR> 1. Все виндозные RTL ВЫНУЖДЕНЫ не использовать напрямую хэндлы
BR>    (дескрипторы, в
BR> вашей терминилогии) реальных файлов. Виновны: функция stat (информацию
BR> в том виде, в котором она должна быть представлена, в винде получить
BR> невозможно) и несколько аналогичных. Плюс - принципиально разные коды
BR> различных флагов, типа O_READ или же полное отсутствие других -
BR> O_BINARY. Итог - все RTL ведут внутренние массивы структур, в которых

Вообще-то, мы этот O_BINARY именно для вас придумали. Чтобы ваши
библиотеки могли догадаться, работаем мы с бинарным файлом или с
текстовым. В UNIX'е этой разницы нет, и O_BINARY просто игнорируется
(если вообще определен).

BR> 2. В Win32 ни stdin ни stdout ни stderr НЕТУ. Просто НЕТУ и все.
BR> Есть две вещи: GetStdHandle(STD_INPUT/OUTPUT/ERROR_HANDLE) и
BR> GetStartupInfo(...) процесса где МОГУТ БЫТЬ (а могут и НЕ быть) указаны
BR> ПЕРВОНАЧАЛЬНЫЕ хендлы соотвествующих файлов. Любое место процесса или
BR> подгруженной им дллины может взять и заменить эти хендлы через
BR> SetStdHandle.  Может вообще убить их нак; хоть консольный хоть гуишный

Открую тебе секрет: в UNIX'е ты тоже можешь проделать с хендлями
всякие штуки, пользуясь средствами системного API (например, close(),
dup(), dup2()). Разумеется, если ты подменишь дескриптор файла,
которым пользуется stdio, то stdio обидется. Поэтому никто этого
не делает.

Я не вижу никаких серьезный прочин, почему в форточках нельзя
аккуратно заэмулировать posix-совместимое поведение хендловых
операций, таких, как open(), close(), read(), write() и т.п.
И почему при этом дескриптор открытого файла не может совпадать
с системным file handle.

BR> ЗЫЫ: И виноваты в этом засранстве, как ни странно, именно юниксоиды,
BR> требующие наличия определенных функций в составе стандартизированного
BR> CLib. А они полноценно - НЕРЕАЛИЗУЕМЫ. Сделать-то их сделали, но только
BR> для ЧАСТНЫХ СЛУЧАЕВ использования. Вот и получайте головняк при порте
BR> :)

Ну если специально проектировать OS так, чтобы она была насколько
возможно несовместима с UNIX'ом, то при определенном умении и старании
можно добиться заметных успехов :-)

--
        Wishes, Alexander Pevzner (pzz@pzz.msk.ru)
--- ifmail v.2.15dev5
 * Origin: Private Node of Alexander Pevzner (2:5020/400)