LINUX.ORG.RU

read()/write() vs ioctl ()


0

0

Тут у нас на работе поднялся флейм по поводу драйверов: Спрашивает меня начальник, а скажи почему ты делаешь обмен данными через read()/write() а не через ioctl(). - Потому что для этого они предназначены?

Правда вопрос больше касался windows драйвера (к linux драйверу у него таких вопросов не возникло).

1. Он (начальник) сказал что типа "ioctl это стандартный способ обмена данными с устройством в windows, а read и write подмножество ioctl".

Я думаю что да конечно можно и через ioctl() но правильнее, красивее что ли через read/write. (ну типа можно и плоской отверткой крестовые шурупы крутить и даже ножом, но зачем есть же крестовая). Начальник говорит докажи :)

2. Разбираемся как будить и усыплять процессы, чтобы организовать ожидание данных в драйвере (windows). Начальник говорит типа нафига: пишите к драйверу пользовательскую DLL и делайте это там.

Я всетаки считаю что это должно делаться в драйвере (ну как в linux).

Вот, хотелось бы услышать мнения:(только не надо типа НАЧАЛЬНИК = ДУРАК ), а по существу. Может я что то непонимаю ?

anonymous

имхо, в принципе, надо делать, как говорит начальник,
тем более если сам обосновать не можешь.

anonymous
()

> 1. Он (начальник) сказал что типа "ioctl это стандартный способ обмена данными с устройством в windows, а read и write подмножество ioctl".

Он прав, что это стандартный способ. Не сталкивался пока ни с одним виндовым драйвером, у
которого бы по-другому было.

> правильнее, красивее что ли через read/write

Для винды вряд ли, поскольку в ней нет той универсальной модели ввода/вывода через файлы,
которая есть в Линуксе.

Agent666
()

> ioctl это стандартный способ обмена данными

ioctl - это стандартный способ управления устройством, в отличие от read/write, которые как раз и есть способ обмена данными.

no-dashi ★★★★★
()

> Я думаю что да конечно можно и через ioctl() но правильнее, красивее что ли через read/write

Это сильно зависит от устройства - для некоторых железяк обмен через ioctl естественнее.

> как будить и усыплять процессы, чтобы организовать ожидание данных в драйвере (windows). Начальник говорит типа нафига: пишите к драйверу пользовательскую DLL и делайте это там.

В венде можно и так (хотя, ИМХО, лучше в драйвере), но в Линуксе это не катит - проще сделать poll. И ни в одной системе не следует делать отдельный ioctl "ждать события".

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.