Я пытаюсь взять маску сходства и сделать из нее запятую с помощью 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;
}
На выходе получается тонна нулей, а затем случайные числа.
Вы забыли загрузить свою маску, что вы можете сделать так:
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];
Тогда вы должны начать получать некоторые разумные результаты.
Рекомендация: уделять больше внимания деталям. Ты никуда не денешься, если не получишь. И принять этот ответ было бы неплохо, так как я все прибрал для вас.
Других решений пока нет …