Проблемы с получением привязки к процессору (Linux)

Я пытаюсь взять маску сходства и сделать из нее запятую с помощью CPU_ISSET (). Затем мне нужно добавить строку «taskset -c» перед ней и исполняемый файл за ней, чтобы создать команду Linux.

Когда я добавляю числа процессора к массиву и печатаю его, вывод не правильный.

Мне нужен массив для вывода в виде строки, чтобы запустить команду Linux.

int main() {
cpu_set_t mask;
int temp[FILENAME_MAX]
for(int i = 0; i < CPU_SETSIZE; i++)
{
if(CPU_ISSET(i, &mask))
{
temp[i] = i;
}
}
for(int i: temp)
os << i;
string str(os.str());
cout << str;
return 0;
}

На выходе получается тонна нулей, а затем случайные числа.

0

Решение

Вы забыли загрузить свою маску, что вы можете сделать так:

sched_getaffinity (getpid (), CPU_SETSIZE, &mask);

Это все.


Редактировать:

Я не заметил раньше, но эти петли имеют недостатки, даже после вашего редактирования. Для первого сделайте что-то вроде:

for (int i = 0; i < CPU_SETSIZE; i++)
temp [i] = (CPU_ISSET (i, &mask)) ? i : -1;

И для второго:

for (int i : temp)
{
if (i >= 0)
os << i;
}

И, конечно же, объявить temp как:

int temp [CPU_SETSIZE];

Тогда вы должны начать получать некоторые разумные результаты.

Рекомендация: уделять больше внимания деталям. Ты никуда не денешься, если не получишь. И принять этот ответ было бы неплохо, так как я все прибрал для вас.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector