В signal.h
есть декларация signal
функции:Что это за декларация и как ее использовать?
void (*signal(int signo, void (*func)(int))) (int);
Как интерпретировать это и то, что использование декларированию в этом странном образе?
В signal.h
есть декларация signal
функции:Что это за декларация и как ее использовать?
void (*signal(int signo, void (*func)(int))) (int);
Как интерпретировать это и то, что использование декларированию в этом странном образе?
Функция signal
принимает int
и указатель функции в качестве аргументов и возвращает указатель на функцию. Аргумент указателя функции и указатель возвращаемой функции каждый принимают аргумент int
и возвращает void
.
signal
прототип иногда пишется так:
typedef void (*signal_handler_type) (int);
signal_handler_type signal (int, signal_handler_type);
Поскольку функция signal
позволяет абоненту заменить существующий обработчик сигнала, он возвращает тот, который был заменен после вызова.
на APUE,
Прототип функции сигнала указывает, что функция требует два аргумента и возвращает указатель на функцию, которая возвращает ничего (аннулируются). Первый аргумент функции сигнала, signo, является целым числом. Второй аргумент - это указатель на функцию, которая принимает единственный целочисленный аргумент и ничего не возвращает. Функция , адрес которой возвращается как значение сигнала, принимает один аргумент целых чисел (окончательный (int)). На простом английском языке в этом объявлении говорится, что обработчику сигнала передается одно целое аргумент (номер сигнала) и что он ничего не возвращает. Когда мы вызываем сигнал , чтобы установить обработчик сигнала, вторым аргументом является указатель . Возвращаемым значением сигнала является указатель на предыдущий обработчик сигнала.
недоумение сигнальную функцию прототипа показали, можно сделать гораздо проще за счет использования следующих ЬурейеЕ:
typedef void Sigfunc(int);
Тогда прототип становится
Sigfunc *signal(int, Sigfunc *)
Что такое APUE? Ссылка? –
Расширенное программирование в среде Unix. – jxh
Signal
функция определяет способ обрабатывать сигналы с номером сигнала, указанным signo (здесь).
Параметр func
определяет один из трех способов, в которых сигнал может быть обработан программой: вы можете посмотреть [здесь] [1]
[1]: http://www.cplusplus.com/reference/csignal/signal/ для получения более подробной информации
HTTP : //cdecl.org –
Люди, не повышайте это. Дюп сотни раз. Просто потому, что вы этого не понимаете, это не значит, что это большой вопрос. На самом деле это не так. –
@ H2CO3 - за исключением того, что если вы вставляете это в cdecl.org, он утверждает, что это синтаксическая ошибка, хотя это не так. – detly