Почему нам все еще нужны системные вызовы read () и write (), почему мы не можем заменить их системным вызовом ioctl? - PullRequest
0 голосов
/ 17 ноября 2018

В Linux, для всех операций чтения и записи мы используем системные вызовы read () и write (). То же самое мы можем сделать с системным вызовом ioctl (), тогда почему нам все еще нужны системные вызовы read () и write ()?

Есть ли какая-либо безопасность или высокая производительность при использовании системных вызовов read () и write (), а не ioctl ()?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Теоретически все может быть сделано с использованием ioctl().Но цель ioctl() состоит в том, чтобы предоставить способ выполнять различные специфичные для устройства операции.Когда есть операции, которые реализует большинство устройств, лучше использовать более конкретную функцию.Это позволяет компилятору выполнять проверку типа аргумента.Универсальная функция, такая как ioctl(), не может проверить, что вы предоставили параметры, соответствующие этой операции.

0 голосов
/ 17 ноября 2018

Если мы удалим read () и write (), то система больше не будет соответствовать стандарту posix (и многие существующие программы будут ломаться). Аналогичным образом, если мы полагаемся исключительно на системные вызовы Linux ioctl, то наш код больше не переносится на другие системы.

...