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

Поиск:

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


pattern`щик
****


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

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



Цитата(KaraKum @  10.1.2011,  15:37 Найти цитируемый пост)
cpuid возвращает информацию только о том процессоре, на котором эта команда была вызвана

покажите WinAPI функцию которая позволяет указать о каком из процессоров получить информацию. просто любопытно.
PM WWW   Вверх
KaraKum
Дата 10.1.2011, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(boostcoder @ 10.1.2011,  16:40)
Цитата(KaraKum @  10.1.2011,  15:37 Найти цитируемый пост)
cpuid возвращает информацию только о том процессоре, на котором эта команда была вызвана

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

Такой функции я тоже не встречал.
Получить информацию о тактовой частоте каждого процессора можно с помощью функции CallNtPowerInformation().

Добавлено @ 15:50
Код

SYSTEM_INFO systemInfo;
GetSystemInfo(&systemInfo);
const int processorsCount    = systemInfo.dwNumberOfProcessors;

const int processorPowerInformationArraySize    = sizeof(PROCESSOR_POWER_INFORMATION) * processorsCount;
PROCESSOR_POWER_INFORMATION* processorPowerInformationArray    = (PROCESSOR_POWER_INFORMATION*)malloc(processorPowerInformationArraySize);

if(CallNtPowerInformation(ProcessorInformation, NULL, 0, processorPowerInformationArray, processorPowerInformationArraySize) != ERROR_SUCCESS)
{
    char* buffer    = getErrorString(GetLastError());
    messenger->printf("E: CallNtPowerInformation() failed with error \"%s\".\n", buffer);
    LocalFree(buffer);
}

for(int i = 0; i < processorsCount; i++)
{
    ProcessorPower *processorPower    = new ProcessorPower;
    dcuInfo->processorsPower.push_back(processorPower);

    processorPower->number    = processorPowerInformationArray[i].Number;
    processorPower->maxMhz    = processorPowerInformationArray[i].MaxMhz;
    processorPower->currentMhz    = processorPowerInformationArray[i].CurrentMhz;
    processorPower->mhzLimit    = processorPowerInformationArray[i].MhzLimit;
}

free(processorPowerInformationArray);


Добавлено через 6 минут и 36 секунд
Вот этот код, в принципе, можно было бы обернуть в #ifdef WINDOWS/#elif UNIX/#endif... и можно парсить системный файл, но как-то это примитивно и неправильно...  smile 

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


pattern`щик
****


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

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



Цитата(KaraKum @  10.1.2011,  15:48 Найти цитируемый пост)
Такой функции я тоже не встречал.

т.е. вам не нравится в линухе cpuid из-за того что невозможно указать о каком процессоре получить информацию. в то же время, оказывается, что это невозможно и в вендаусе smile 

зы
а код порадовал. особенно хранение в с++ контейнере сырых указателей. а выделение памяти двумя способами(malloc() и new[]) - так это вообще загадка smile 
это код не портировать нужно, а переписывать.

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


Опытный
**


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

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



Цитата(boostcoder @  10.1.2011,  16:59 Найти цитируемый пост)
т.е. вам не нравится в линухе cpuid из-за того что невозможно указать о каком процессоре получить информацию. в то же время, оказывается, что это невозможно и в вендаусе smile 

Эмм, я говорил что обо ВСЕХ процессорах нужна информация о тактовой частоте. cpuid - это другая информация о процессоре (марка, модель, брэнд...) - тактовую частоту там даже нельзя получить. cpuid() работает и в линуксе и в виндовсе (и портировать не нужно).


Цитата(boostcoder @  10.1.2011,  16:59 Найти цитируемый пост)
а код порадовал. особенно хранение в с++ контейнере указателей. и выделение памяти двумя способами - так это вообще загадка smile 
это код не портировать нужно, а переписывать. 

Это не ко мне, а к ребятам из Microsoft'а.

Добавлено через 1 минуту и 11 секунд
А к коду претензий нет - всё-таки его нужно портировать, а не переписывать.
PM MAIL WWW   Вверх
Любитель
Дата 10.1.2011, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(boostcoder @  10.1.2011,  15:59 Найти цитируемый пост)
т.е. вам не нравится в линухе cpuid из-за того что невозможно указать о каком процессоре получить информацию. в то же время, оказывается, что это невозможно и в вендаусе smile 

Честно - не проверял (ибо лень), но вообще самое высокоуровневое АПИ - это по идее WMI. Выбираем всё по "select * from Win32_Processor" и используем кучу полей: http://msdn.microsoft.com/en-us/library/aa...v=vs.85%29.aspx (там примеры на VBScript, на С++ побольше кода уйдёт на инициализацию COM, запрос нужных провайдеров и пр., но суть таж).


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


pattern`щик
****


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

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



Цитата(Любитель @  10.1.2011,  16:09 Найти цитируемый пост)
самое высокоуровневое АПИ - это по идее WMI

WMI - это не совсем WinAPI, мне так кажется..

Добавлено через 6 минут и 34 секунды
в добавок: http://stackoverflow.com/questions/2418921...peed-in-c-linux
PM WWW   Вверх
KaraKum
Дата 10.1.2011, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Странно это как-то - парсить файлы, сгенерированные операционной системой. Ненужный посредник возникает...
Хотя ничего страшного - это всё-равно требуется сделать только один раз - при запуске программы.
Про "adapter info" (имя сетевой карты ("Realtek JBC 5460 ...")) не ясно smile 
PM MAIL WWW   Вверх
cutwater
Дата 10.1.2011, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(KaraKum @  10.1.2011,  15:22 Найти цитируемый пост)
Странно это как-то - парсить файлы, сгенерированные операционной системой.


Успокойтесь. Ничего странного в этом нет. Это вполне нормальный подход для *nix систем. Так что привыкайте.


--------------------
user posted image
PM MAIL   Вверх
KaraKum
Дата 10.1.2011, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А вот всё что связано с этими файлами - это конкретно нововведение в Linux'е? Или ещё Unix'а?
Как вообще это посредничество в виде файлов называется? Наверное там и про адаптеры (сетевые карты) что-нибудь вычитать (распарсить) можно...
PM MAIL WWW   Вверх
panter
Дата 10.1.2011, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Unix, на сколько я знаю. Кстати, это не совсем файлы. Там много чего можно найти. smile
PM MAIL ICQ Skype Jabber   Вверх
cutwater
Дата 10.1.2011, 17:48 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(KaraKum @  10.1.2011,  16:12 Найти цитируемый пост)
А вот всё что связано с этими файлами - это конкретно нововведение в Linux'е? Или ещё Unix'а?

http://ru.wikipedia.org/wiki/Procfs



--------------------
user posted image
PM MAIL   Вверх
KaraKum
Дата 10.1.2011, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

она может иметь различное имя в различных ОС (curproc во FreeBSD, self в Linux).

Вот это огорчает.
А мне говорили что FreeBSD может запускать бинарники Linux'а. Походу ошибались...
А как можно узнать в Unix'е имя операционной системы?
PM MAIL WWW   Вверх
fish9370
Дата 10.1.2011, 19:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(KaraKum @  10.1.2011,  18:28 Найти цитируемый пост)
А как можно узнать в Unix'е имя операционной системы?


man 2 uname

Код

NAME
       uname - get name and information about current kernel

SYNOPSIS
       #include <sys/utsname.h>

       int uname(struct utsname *buf);

DESCRIPTION
       uname()  returns system information in the structure pointed to by buf.  The utsname struct is defined in
       <sys/utsname.h>:
              struct utsname {
                      char sysname[];
                      char nodename[];
                      char release[];
                      char version[];
                      char machine[];
              #ifdef _GNU_SOURCE
                      char domainname[];
              #endif
              };
       The length of the arrays in a struct utsname is unspecified; the fields are terminated  by  a  null  byte
       (’’ ’).

RETURN VALUE
       On success, zero is returned.  On error, -1 is returned, and errno is set appropriately.




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


Опытный
**


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

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



Спасибо за функцию!

Из статьи про procfs:
Цитата

В современных версиях FreeBSD procfs постепенно ликвидируется.

Чем тогда они в будущем будут заменены во FreeBSD? (или заменены сейчас, раз ликвидируются постепенно?)
PM MAIL WWW   Вверх
fish9370
Дата 10.1.2011, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(KaraKum @  10.1.2011,  20:14 Найти цитируемый пост)
Чем тогда они в будущем будут заменены во FreeBSD? (или заменены сейчас, раз ликвидируются постепенно?)


sysfs (/sys) - это еще одно представление информации о железе через файловую систему, но хоронить procfs я бы пока не стал..


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

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

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


 




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


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

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