Есть ли способ sigaction () для обработчика сигнала с несколькими параметрами? - PullRequest
2 голосов
/ 25 октября 2011

Я использую sigaction () для выполнения действия каждый раз при получении SIGINT.Все учебники, которые я видел, используют этот прототип в качестве обработчика сигнала

void sig_handler(int sig);

Есть ли способ как-то заставить это принять больше параметров, чтобы они соответствовали моим потребностям?Так например

void sig_handler(char* surname, int age);

Это мой код:

void sig_handler(int sig) {
    printf("SIGINT(%d) received\n", sig);
}

int main( ){
    struct sigaction act;
    act.sa_handler=sig_handler;

    sigaction(SIGINT, &act, NULL);

    while(1){};
    return 0 ;
}

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Не напрямую, но вы можете установить глобальную переменную, которая скажет вашему sig_handler(), что делать.

int ACTION = 0;

void sig_handler(int sig) {
    if (sig == SIGINT) {
        switch (ACTION) {
          case 0: other_function(char* surname, int age);
          break;
        // more cases
        default:
          ;
        }
    } else if ( ....  // more signals
    }
}

int main( ){
    struct sigaction act;
    act.sa_handler=sig_handler;

    sigaction(SIGINT, &act, NULL);

    while(1){};
    return 0 ;
}
1 голос
/ 25 октября 2011

Вы не можете сделать это с помощью сигналов.Как эти параметры будут предоставлены и доставлены?Сигнал - это просто предопределенный числовой код, который заставляет процесс выполнять обработчик асинхронно, прерывая основной поток.

Однако вы можете использовать для этого сокет Unix, канал или файл fifo.

...