Re: libpthreads,libmpeg3 -> windows
- From
- Victor Krapivin (2:5080/1003)
- To
- Boris Rudakov ()
- Date
- 2003-06-13T14:14:34Z
- Area
- CARBON.COPY
* Forwarded from area 'RU.UNIX.PROG'
From: Victor Krapivin <v.krapivin@zaval.org>
> ХА ! "В моем понимании" !
> Ты в RTL посмотри, как они сделаны !!!
Да ладно тебе народ пугать. Вполне можно и CLib пользоваться. Если
помнить про грабли еще времен MS-DOS. Ну хотя бы такие
- --- cut ---
// Really crasy action; I hate Microsoft
setmode(1, _O_BINARY);
- --- cut ---
Лучше б рассказал, как эти грабли обходить. А то по твоей рекомендации
простейший
while((readed=read(fd, buffer, length))>0)
write(fd, buffer, readed);
придется и тот переделывать, я уж не говорю о
while((ch=getchar())!=EOF) if(ch!='\r') putchar(ch);
- этот вообще в кошмар превращается 8-)
> 1. Все виндозные RTL ВЫНУЖДЕНЫ не использовать напрямую хэндлы (дескрипторы, в
> вашей терминилогии) реальных файлов. Виновны: функция stat (информацию в том
> виде, в котором она должна быть представлена, в винде получить невозможно)
stat - это чистейшей воды <IRP_MJ_DIRECTORY_CONTROL,
IRP_MN_QUERY_DIRECTORY, FileBothDirInformation>, что по Win32-API-шному
означает банальнейший FindFirstFile(), или readdir(), если угодно.
> Если ты откроешь (получишь извне) файл средствами API, ты никогда не
> сможешь его юзать средствами эмуляционного-юниксоидного слоя CLib. Для
int _open_osfhandle ( long osfhandle, int flags );
> 2. В Win32 ни stdin ни stdout ни stderr НЕТУ.
Это называется "делай их сам". Хотя бы так
fclose(stdout);
*stdout = *fopen("my-cool-log-file", "a+b");
> инициализации, еще ДО передачи управления main/WinMain. А что делать, если я
> первой же строчкой хочу сменить их ?
> совершенно различны (а у Мелкософта, как обычно, еще и недокумментированы).
#ifdef WIN32
dup2(_get_osfhandle(handle), 1);
#endif
8-)
> А теперь мы еще должны вспомнить, что в Виндах совершенно нормальное состояние,
> когда в рамках одного процесса работает туева хуча модулей, собранных вообще
> разными компайлерами, да еще и с разными вариантами RTL ! Однормеменно:
И что? Пусть работают, друг на друга они как правило не влияют. Или
очень хочется после вызова какой-нибудь самописной libkewl еще и errno
проинспектировать? 8-)))
> А теперь правильный вопрос: тебе все еще хочется под Виндами делать printf в
> то, что ты наивно считаешь "stdio" ? Ы ? Я бы не стал...
Для порта-то? Вполне, если уже походил на местные грабли. Времена
странного поведения winsock уже прошли 8-)
> эмуляционный слой сработает как надо. Но чуть что посложнее и все - амба. Нужно
> полностью ломать стереотипы, подписываться на виндозные эхи и работать с
> операционкой по ее правилам.
Или иметь пачку тестов, которые проверяют правильность работы твоего
кода. И ожидать пакостей на ровном месте, ну как с флажком _O_BINARY.
> ЗЫЫ: И виноваты в этом засранстве, как ни странно, именно юниксоиды, требующие
> наличия определенных функций в составе стандартизированного CLib. А они
> полноценно - НЕРЕАЛИЗУЕМЫ. Сделать-то их сделали, но только для ЧАСТНЫХ СЛУЧАЕВ
> использования. Вот и получайте головняк при порте :)
У нас тоже есть головняк - winelib называется 8-)
--
Viktor
--- ifmail v.2.15dev5
* Origin: Zaval CE (2:5080/1003@fidonet)