Сомневаюсь в SIGINT и SIG_IGN

От Восхищения Хакера, p. 66, рисунок 5-2

int pop(unsigned x)
{
    x = x - ((x >> 1) & 0x55555555);
    x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
    x = (x + (x >> 4)) & 0x0F0F0F0F;
    x = x + (x >> 8);
    x = x + (x >> 16);
    return x & 0x0000003F;
}

Выполняется в инструкциях ~20-выхода (зависимый дуги), никакое ветвление.

Восхищение Хакера восхитительно! Наиболее рекомендуемый.

4
задан 19.05.2020, 18:04

1 ответ

Для использования обоих сигналов, необходимо включать signal.h, как этот пример, взятый от страница Wikipedia, связанная с сигналами C:

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

static void catch_function(int signo) {
    puts("Interactive attention signal caught.");
}

int main(void) {
    if (signal(SIGINT, catch_function) == SIG_ERR) {
        fputs("An error occurred while setting a signal handler.\n", stderr);
        return EXIT_FAILURE;
    }
    puts("Raising the interactive attention signal.");
    if (raise(SIGINT) != 0) {
        fputs("Error raising the signal.\n", stderr);
        return EXIT_FAILURE;
    }
    puts("Exiting.");
    return 0;
}
6
ответ дан 19.05.2020, 18:05
  • 1
    It' s хороший ответ. Я думаю так о Вашем вопросе. В дополнительном, первом, необходимо выполнить команду как этот " склонный - получают установку build-essential" – Mark Mucha 19.05.2020, 18:05

Теги

Похожие вопросы