Вы можете настроить обработчик сигналов и использовать системный вызов alarm()
, чтобы запланировать доставку этого сигнала, что прервет вызов fwrite()
. Типичное использование будет выглядеть примерно так:
signal(SIGALRM, handle_sigalrm);
received_alarm = 0;
alarm(10);
...some blocking operation...
alarm(0); // cancel the alarm.
if (received_alarm) {
// command timed out
} else {
// command completed successfully
}
Это предполагает, что handle_sigalrm()
является функцией, которая устанавливает глобальную переменную received_alarm
при вызове. Google имеет несколько примеров.
Это абсолютно не лучший способ справиться с этим, но это может быть ваш единственный вариант, если вы вынуждены использовать fwrite()
. Лучшим решением является использование цикла select()
или poll()
и неблокирующих сокетов, но для этого может потребоваться существенная реорганизация вашего кода.
Ваша ОС будет поддерживать его. Не стандартные библиотеки C или C++. –
Код будет работать на linux, в основном ubuntu – neorg
Поместите его в свой вопрос, а не комментарий, и используйте нужные теги. –