вопрос по обработке сигналов с помощью signal в си

Рейтинг: 0Ответов: 0Опубликовано: 19.04.2023

Есть вот такой код. Программа представляет собой сервер получающий сообщения от клиента посредством передачи сигналов 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);
}

Ответы

Ответов пока нет.