При использовании последовательного порта через POSIX рекомендуется сохранить исходные атрибуты с помощью tcgetattr()
, прежде чем изменять их с помощью tcsetattr()
, а затем восстановить их перед закрытием порта. Как насчет того, когда программа завершается нажатием клавиши control-C или когда программа получает SIGINT
? Я не видел этого ни в одном из серийных уроков.
Очевидно, что функции atexit()
было бы недостаточно, потому что она не вызывается обработчиком по умолчанию SIGINT
. Таким образом, кажется, что необходима установка обработчика сигнала, который восстанавливает атрибуты любых последовательных портов, которые все еще открыты. Насколько безопасно вызывать tcsetattr()
из обработчика сигнала?
Кто-то может просто отклонить эту проблему как несущественную, но обычно завершают программу с помощью control-C, особенно той, которая может завершать операции десятками секунд. Если в этом случае нормально не сохранять настройки последовательного порта, то, по-видимому, нет оснований их вообще сохранять. Во всяком случае, лучше не беспокоиться, чем делать это непоследовательно.
Я нашел примеров исходного кода, выполняющих вышеописанное , но ничего хорошо документированного. Я предполагаю, что мне интересно некоторое обсуждение того, является ли это хорошей идеей. Спасибо.