Он должен работать так, как вы ожидаете. Единственное, что вам нужно убедиться, это то, что flag
имеет тип volatile sig_atomic_t
, чтобы избежать гонки данных на flag
.
Вот пример. L oop печатает значение bytes
непрерывно (в какой-то момент, когда bytes
достигнет UINT64_MAX
), оно будет обернуто. Вы можете повторно отправить SIGINT
на проверку.
#include <stdio.h>
#include <signal.h>
#include <inttypes.h>
volatile sig_atomic_t flag = 0;
void signal_handler(int num)
{
flag = 1;
}
int main(void)
{
uint64_t bytes = 0;
sigset_t set;
signal(SIGINT, signal_handler);
int ret = sigaddset(&set, SIGINT);
while(1) {
bytes++;
sigprocmask(SIG_BLOCK, &set, NULL);
if (flag == 1)
printf("The number of bytes copied are :%" PRIu64 "\n", bytes);
flag = 0;
sigprocmask(SIG_UNBLOCK, &set, NULL);
}
}