Начинать не с теории а с практики
Приходит «вопрос», а скорее попытка продемонстрировать свое мнение, но для читателей я этот пример разберу.
Сообщение:
Ты говоришь: «сначала должна быть практика». Но иногда не получается никак заниматься практикой без теории. Приведу пример:
(*** ДЛИННЫЙ ПРИМЕР, НИЖЕ КОРОТКИЙ ВЫВОД
Пускай мне нужно получать наборы символов, разделённых двоеточием (0x3A). Данные приходят через Unix Domain Socket (упрощённый вариант — через stdin). При каждом завершении слова нужно отправить соответствующую этому «слову» строку (из какой-то условной карты, хранящейся в памяти) обратно в сокет (или stdout).
При реализации возникает проблема: чтение сокетов (или stdin) блокирует. Это значит, что может возникнуть взаимоблокировка (клиент ждёт ответа, сервер ждёт окончания сообщения клиента). Очевидным решением будет посмотреть (с помощью ioctl), есть ли в буфере сокета (стандартного ввода) данные, и только в случае их наличия производить чтение.
*** КОНЕЦ ДЛИННОГО ПРИМЕРА, СЕЙЧАС БУДЕТ ВЫВОД)
таким образом, без более-менее хорошего понимания того, как работают дескрипторы файлов (и в чём различие между файлом сокета и stdin) и ioctl далеко в решении этой задачи продвинуться не получиться. Вопрос: как в этом случае начинать не с теории, а с практики?
Ответ:
Даже в своем примере ты НАЧАЛ с постановки практической задачи…
#shifublog
Статья из блога:
https://shifu.blog