Каковы последствия вызова записи () с нулевой длиной?

Легкое правило. Запустите с объявления всего частного. И затем продвижение к общественности как потребности возникает и разрабатывает, гарантирует его.

, Когда представляющие участники спрашивают себя, если Вы представляете выбор представления или выбор абстракции. Первое является чем-то, чего Вы хотите избежать, поскольку это представит слишком много зависимостей от фактического представления, а не от его заметного поведения.

Как правило я стараюсь избегать реализаций метода переопределения путем разделения на подклассы; слишком легко завинтить логику. Объявите абстрактные защищенные методы, если Вы намереваетесь для него быть переопределенными.

кроме того, используйте @Override аннотацию при переопределении для препятствия вещей повредиться, когда Вы осуществите рефакторинг.

5
задан Community 23 May 2017 в 12:06
поделиться

6 ответов

В заключение, я придерживаюсь идеи Уоррена Янга об обновлении драйвера и публикации патча (когда я получаю раунд tuit )

. ]
2
ответ дан 14 December 2019 в 04:44
поделиться

Я думаю, очень мало - возможно, что запись нулевой длины будет блокироваться, если буфер, в который выполняется запись также имеет нулевое доступное пространство в некоторых драйверах. Запрещение записи нулевой длины могло бы упростить задачу в подобных случаях, а также избежать большого количества ненужной работы.

Почему бы просто не удалить эту проверку и не посмотреть, что за черт возьми на самом деле? :)

1
ответ дан 14 December 2019 в 04:44
поделиться

То, что вы описываете, по сути является тем же злом, которое поражает несколько Windows API, которым требуется непредсказуемый объем памяти. Практика заключается в том, чтобы вызывать их без буфера для размещения своей работы, они все равно выполняют работу, не сохраняя результаты, но подсчитывая количество байтов, которые им понадобятся в процессе. Затем вы выделяете буфер такого размера и снова вызываете функцию с буфером, зная его размер.

Это неописуемое зло. Это компьютерный программный эквивалент разложившейся бюрократии, когда каждый отдел требует, чтобы вы заполнили форму, содержащую большую часть той же информации, что и та, которую вы передали предыдущему отделу, но поскольку в каждой форме есть различная информация, они не просто возьмут копию формы, которую вы дали другим парням. Птуи!

Время программиста стоит дорого, время процессора дешево. Требование, чтобы программисты написали один и тот же вызов API N раз, чтобы выяснить какое-то мировое состояние, которое сам API может решить сам по себе, пытается перевернуть это с ног на голову.

Лучшая практика - тогда заставить драйвер делать все, что он может, чтобы убедиться, что ваш write () работает успешно. Если можно заранее предсказать, что это не удастся, проверив какое-то состояние мира, возможно, это должна быть ioctl ().

5
ответ дан 14 December 2019 в 04:44
поделиться

несерьезный ответ: вы можете получить такую ​​программу, как touch : P

0
ответ дан 14 December 2019 в 04:44
поделиться

Что будет означать запись нулевой длины? В общем, запись означает передачу данных ... и я уверен, что больше проблем может быть вызвано тем, что она не проверяется и, таким образом, улавливается большинство неверных входных данных для драйверов. y

если вам нужен однобитовый информационный вызов, я думаю, что ioctl - это то, что вам нужно. Это некрасиво, но что вы можете сделать?

В качестве альтернативы, воспользуйтесь ядерным вариантом, используйте mmap () и переместите все это в пользовательское пространство. Низкие накладные расходы, и вы можете написать классический poke-код, например «записать X в этот регистр», что почти кажется тем, что вам нужно.

0
ответ дан 14 December 2019 в 04:44
поделиться

Я с содроганием предлагаю использовать ioctl (), но разве это не лучший интерфейс для получения информации о состоянии интерфейса?

0
ответ дан 14 December 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: