为什么我们仍然需要read()和write()系统调用,为什么不能用ioctl系统调用替换它们?

时间:2018-11-17 15:56:23

标签: c linux io

在linux中,对于所有读取和写入操作,我们使用read()和write()系统调用。我们也可以使用ioctl()系统调用来做同样的事情,那为什么我们仍然需要read()和write()系统调用?

使用read()和write()系统调用而不是ioctl()时是否具有安全性或快速性能?

2 个答案:

答案 0 :(得分:2)

理论上,一切可以使用ioctl()完成。但是ioctl()的目的是提供一种执行各种特定于设备的操作的方法。当大多数设备执行某些操作时,最好使用更具体的功能。这允许编译器执行参数类型检查。像ioctl()这样的通用函数无法检查您是否已提供适合该操作的参数。

答案 1 :(得分:1)

如果我们删除了read()和write(),那么该系统将不再与posix兼容(并且很多现有软件都会损坏)。同样,如果我们仅依靠linux ioctl系统调用,那么我们的代码将不再可移植到其他系统。