Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из Windows в *nix. Портирование программы на C++. 
:(
    Опции темы
KaraKum
  Дата 10.1.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Доброе время суток.
Есть программа на C++, написанная изначально с обширным использованием WinAPI (потоки, мьютексы, получение информации о железе...) - нужно её портировать под Linux, FreeBSD (*BSD), Solaris, MacOS, Minix...
Насколько я знаю, все эти ОС-ы являются продолжениями Unix'а.
Будет ли программа компилироваться под этими ОС-и, если портировать под Unix?
Где можно найти полный "API-reference" по Unix? (желательно для "мигрирущующих" с Windows'а).

P.S. портирование подразумевается прямо в коде с использованием #ifdef/#else/#endif..., а не подключением библиотек, абстрагирующих ОС (posix thread's под Windows, например).

Это сообщение отредактировал(а) KaraKum - 10.1.2011, 20:17
PM MAIL WWW   Вверх
boostcoder
Дата 10.1.2011, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(KaraKum @  10.1.2011,  13:18 Найти цитируемый пост)
Будет ли программа компилироваться под этими ОС

только тот код, который не использует WinAPI.

Цитата(KaraKum @  10.1.2011,  13:18 Найти цитируемый пост)
Где можно найти полный "API-reference" по Unix?

man + google

Цитата(KaraKum @  10.1.2011,  13:18 Найти цитируемый пост)
P.S. портирование подразумевается прямо в коде с использованием #ifdef/#else/#endif..., а не подключением библиотек, абстрагирующих ОС

сочувствую smile

большинство WinAPI можете найти в wine-dev. такой способ тоже работает.
PM WWW   Вверх
KaraKum
Дата 10.1.2011, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Цитата(boostcoder @  10.1.2011,  14:33 Найти цитируемый пост)
только тот код, который не использует WinAPI.

Это очевидно.


Цитата(boostcoder @  10.1.2011,  14:33 Найти цитируемый пост)
man + google

Бросаю кость для поиска средств получения информации о железе.


Цитата(boostcoder @  10.1.2011,  14:33 Найти цитируемый пост)
большинство WinAPI можете найти в wine-dev. такой способ тоже работает. 

В *nix'е должны использоваться её родные средства - так будто программа была написана для этой ОС (так и есть, но по воле случая первым попался под-руку именно Windows).
PM MAIL WWW   Вверх
Фантом
Дата 10.1.2011, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 1
Всего: 49



Цитата(KaraKum @  10.1.2011,  13:18 Найти цитируемый пост)
Есть программа на C++, написанная изначально с обширным использованием WinAPI (потоки, мьютексы, получение информации о железе...) - нужно её портировать под Linux, FreeBSD, Solaris, MacOS...

Под все сразу?  smile 

Если всерьез, то вариантов два. 

Если программа непосредственно и всерьез не связана с железом, то  сначала аккуратно переписать  все под Windows, избавившись от прямой работы с API. Если связана и от использования API никуда не деться - писать ее функциональный аналог заново, не трогая старый код. Оба варианта почти наверняка обойдутся дешевле, чем попытка переноса "в лоб". 
PM   Вверх
boostcoder
Дата 10.1.2011, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(KaraKum @  10.1.2011,  13:44 Найти цитируемый пост)
В *nix'е должны использоваться её родные средства

значит переписать полностью, используя кросс-либы. иных(здравых) вариантов нет.
PM WWW   Вверх
KaraKum
Дата 10.1.2011, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Там кусочками - например такое место: идёт общение клиента с сервером посредством кроссплатформенной библиотеки (ENet) и в один "прекрасный" момент клиент должен передать информацию о своей сетевой карте (MAC-адрес, имя...) и о процессоре (cpuid()) - в Windows'е это где-то 100-150 строк обособленного кода (в конце имеется std::string для каждого этого данного - поэтому такое без проблем можно обернуть в #ifdef/#elif/#endif..., но вот в unix programming reference о железе вообще ничего нету  smile 

P.S. вот потоки есть (POSIX threads) - это, вроде как, стандарт - с этим проблем не должно возникнуть во всех Unix-подобных ОС.

Добавлено через 35 секунд
Цитата(boostcoder @  10.1.2011,  14:51 Найти цитируемый пост)
значит переписать полностью, используя кросс-либы. иных(здравых) вариантов нет. 

Откуда такое умозаключение?
PM MAIL WWW   Вверх
boostcoder
Дата 10.1.2011, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(KaraKum @  10.1.2011,  13:56 Найти цитируемый пост)
Откуда такое умозаключение?

изначально отсюда:
Цитата(KaraKum @  10.1.2011,  13:18 Найти цитируемый пост)
WinAPI (потоки, мьютексы, получение информации о железе...)

т.к. я подумал что программа содержит тысячи строк вендового кода.
но, как стало известно позже, вам требуются: cpuid + опции_сети + потоки. тогда не понятно, почему тема тут? в гугле есть абсолютно все.

зы
от скуки наверное.

PM WWW   Вверх
KaraKum
Дата 10.1.2011, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Цитата(boostcoder @  10.1.2011,  15:06 Найти цитируемый пост)
вам требуются: cpuid + опции_сети + потоки.

про железо в Unix'е ничего нет.


Цитата(boostcoder @  10.1.2011,  15:06 Найти цитируемый пост)
не понятно, почему тема тут? в гугле есть абсолютно все.

тогда странно что нет ответа вот с такой ссылкой


Это сообщение отредактировал(а) KaraKum - 10.1.2011, 14:11
PM MAIL WWW   Вверх
boostcoder
Дата 10.1.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



PM WWW   Вверх
KaraKum
Дата 10.1.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Вот информацию о процессорах получить неизвестно как. cpuid() для этого может быть недостаточно - эта команда возвращает только информацию о том процессоре, на котором эта команда вызывается, а на некоторых системах может быть больше одного процессора.
В Unix-спецификации такого что-то нет, хотя должно же быть - Unix ведь как-то определяет сколько процессоров есть в система (чтобы распределять потоки).
PM MAIL WWW   Вверх
panter
Дата 10.1.2011, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 10.1.2011
Где: Санкт-Петербург

Репутация: нет
Всего: нет



cat /proc/cpuinfo и парсить вывод.
PM MAIL ICQ Skype Jabber   Вверх
boostcoder
Дата 10.1.2011, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



ну хз.. точнее может MAKCim сказать.
PM WWW   Вверх
KaraKum
Дата 10.1.2011, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Цитата(panter @ 10.1.2011,  15:32)
cat /proc/cpuinfo и парсить вывод.

А как можно напрямую воспользоваться теми же средствами, которыми был сформирован этот файл?

Это сообщение отредактировал(а) KaraKum - 10.1.2011, 14:40
PM MAIL WWW   Вверх
panter
Дата 10.1.2011, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 10.1.2011
Где: Санкт-Петербург

Репутация: нет
Всего: нет



PM MAIL ICQ Skype Jabber   Вверх
KaraKum
Дата 10.1.2011, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Цитата(panter @ 10.1.2011,  15:45)
http://kobesearch.cpan.org/htdocs/Linux-Cp...ux/Cpuinfo.html

Спасибо за ответ и прямую ссылку!
Нужна информация по всем процессорам в системе. cpuid возвращает информацию только о том процессоре, на котором эта команда была вызвана, а нужна информация (тактовая частота) по всем процессорам в системе (это может быть многопроцессорный сервер или, например, два процессора на одной мат. плате).
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.