Я закодировал программу, которая считывает и записывает на некоторые контакты gpio и получает некоторые данные через сокет, используя соединение датаграммы. Я хотел попытаться прочитать данные из сокета, когда получен сигнал SIGIO. Но когда я попытался это сделать, операции чтения/записи на булавках gpio стали неудачными. Почему это происходит?Программирование сокетов Linux: чтение данных по SIGIO
Если я не активирую операции чтения/записи gpio, чтобы передать сигнал SIGIO, я не должен получать сигнал SIGIO из-за операций чтения/записи на контактах gpio. Я ошибаюсь? Или все операции ввода-вывода начинают направляться на мой обработчик сигнала?
Вот часть моего кода, где я активировал сигнал SIGIO для сокета.
int fd = socket(AF_INET, SOCK_DGRAM, 0);
...
struct sigaction sa;
memset(&sa, 0, sizeof(struct sigaction));
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = SignalHandler;
sa.sa_flags = SA_RESTART | SA_SIGINFO;
sigaction(SIGIO, &sa, NULL);
fcntl(fd, F_SETOWN, getpid());
fcntl(fd, F_SETSIG, SIGIO);
fcntl(fd, F_SETFL, O_NONBLOCK | O_ASYNC);
Спасибо.
Примечание: код очень огромен и написан в концепции ООП. Копирование всего кода здесь не представляется возможным. Я просто скопировал код, связанный с моей проблемой здесь. Тем не менее, я создам MCVE и скопирую здесь мгновение. Кроме того, я пытаюсь понять концепцию сигнала linux. Потому что это означает, что у меня отсутствует понимание концепции сигнала или поведения SIGIO.
Пожалуйста, пост [MCVE] (http://stackoverflow.com/help/mcve). – MikeMB
Я обновил свой вопрос. – haitaka