Я занимаюсь разработкой на платформе Linux. Я реализовал sighandler так, что когда программа завершается нажатием Ctrl + C, она корректно завершается. Мое изящное определение заключается в том, что он должен закрыть порт UART и установить системное свойство. В настоящее время я вижу, что он закрывает UART, но не может установить системное свойство. Ниже приведена выдержка из кода.
#include <signal.h>
static sighandler_t sighandler_old;
int hUart = NULL;
volatile bool flag_stop_capture = false;
int set_uart_ownership_to_my_function(){
/* Use persistent bit to tell system I have the UART */
return property_set(PROPERTY_UART_OWNERSHIP, PROPERTY_UART_OWNERSHIP_TO_MY_FUNCTION);
}
int unset_uart_ownership_from_my_function(){
/* Use persistent bit to tell system PTI has released UART */
return property_set(PROPERTY_UART_OWNERSHIP, PROPERTY_UART_OWNERSHIP_NOT_IN_USE);
}
void exit_handler(int signum){
flag_stop_capture = true;
}
int main(){
/* Register exit_handler as a SIGINT handler and save old handler */
sighandler_old = signal(SIGINT, exit_handler);
flag_stop_capture = false;
set_uart_ownership_to_my_function();
hUart = open("/dev/ttyS1", O_RDWR | O_NOCTTY);
while(!flag_stop_capture){
//do stuff.
}
unset_uart_ownership_from_my_function();
close(hUart);
/* Restore the old sighandler */
signal(SIGINT, sighandler_old);
return 0;
}
Так что в настоящее время, когда я Ctrl + C, я вижу, что hUart закрывается успешно, но свойство PROPERTY_UART_OWNERSHIP не сбрасывается. Я знаю, что обработчик exit_handler обрабатывается, потому что я вижу закрытие hUart. Почему свойство не сбрасывается? Есть ли проблема с разрешением, когда я Ctrl + C?