C: функция сигнала (параметры?) - PullRequest
5 голосов
/ 24 июля 2010

У меня есть следующий код c:

void handler(int n) {
    printf("n value: %i\n");
}

int main() {
    signal(SIGTSTP, handler);   // ^Z at keyboard
    for(int n = 0; ; n++) {
    }   
}

Мне любопытно, какой параметр n содержится в функции обработчика.Когда вы нажимаете ^Z, обычно печатается: 8320, -1877932264 или -1073743664.Что это за цифры?


Редактировать: Ops Я неправильно написал свой printf.Я исправил это так:

void handler(int n) {
    printf("n value: %i\n",n);
}

Теперь значение n всегда равно 18. Что это за 18?

Ответы [ 6 ]

8 голосов
/ 24 июля 2010

Вы не передали номер функции printf (). Должно быть:

void handler(int n) {
    printf("n value: %i \n", n);
}

n будет сигналом, который вы ловите, в вашем случае 20. См. Описание man 2 signal. Также обратите внимание, что руководство рекомендует использовать sigaction() вместо signal.

6 голосов
/ 24 июля 2010

Параметром обработчика сигнала является номер сигнала , поэтому вы можете использовать одну функцию для множества сигналов. См signal(3).

6 голосов
/ 24 июля 2010

То, как вы это написали, распечатывает случайный мусор.Причина в том, что вы не передаете n на printf.Это должно быть

void handler(int n) {
    printf("n value: %i \n", n);
}

Таким образом, он печатает номер сигнала.

2 голосов
/ 24 июля 2010

Единственным аргументом для функции обработчика сигнала является номер сигнала (что неудивительно). От man signal:

 No    Name         Default Action       Description
 18    SIGTSTP      stop process         stop signal generated from keyboard (CTRL + Z usually)
0 голосов
/ 24 июля 2010

Возвращает номер сигнала.Проверьте эту ссылку для получения дополнительной информации о сигналах управления заданиями, подобных тому, который вы использовали.

The SIGTSTP signal is an interactive stop signal. Unlike SIGSTOP, this signal 
can be handled and ignored.
Your program should handle this signal if you have a special need 
to leave files or system tables in a secure state when a process is 
stopped. For example, programs that turn off echoing should handle 
SIGTSTP so they can turn echoing back on before stopping.
0 голосов
/ 24 июля 2010

Они заменяют носовых демонов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...