вопрос по обработке сигналов с помощью signal в си
Есть вот такой код. Программа представляет собой сервер получающий сообщения от клиента посредством передачи сигналов SIGUSR1 или SIGUSR2 и расшифровывающий с помощью побитовых операций (но это пока не важно). Сервер показывает PID, а затем ждет сигнала SIGUSR1 или SIGUSR2. 1.Вопрос простой: В main в случае поступления сигнала запускается функция- обработчик ft_btoa БЕЗ АРГУМЕНТОВ. Тогда каким образом она понимает что переменная "sig" в описании функции ft_btoa это номер сигнала? 2. Вопрос - в каких случаях допускается использовать signal, а не sigaction?
#include "../include/minitalk.h"
void ft_btoa(int sig)
{
static int bit;
static int i;
if (sig == SIGUSR1)
i |= (0x01 << bit);
bit++;
if (bit == 8)
{
ft_printf("%c", i);
bit = 0;
i = 0;
}
}
int main(int argc, char **argv)
{
int pid;
(void)argv;
if (argc != 1)
{
ft_printf("Error\n");
return (1);
}
pid = getpid();
ft_printf("%d\n", pid);
while (argc == 1)
{
signal(SIGUSR1, ft_btoa);
signal(SIGUSR2, ft_btoa);
pause ();
}
return (0);
}
Источник: Stack Overflow на русском