程序员是否在程序中使用设备文件作为设备驱动程序的接口?

程序员是否在程序中使用设备文件作为设备驱动程序的接口?

在Linux shell中,用户可以通过设备文件作为接口来访问设备驱动程序。

当Linux C程序员想要访问他的C程序中的驱动程序时,他是否也通过其设备文件作为接口来访问驱动程序?

换句话说,设备文件是否仅在 shell 中是设备驱动程序的接口,而不是在 C 程序中,或者两者兼而有之?

答案1

AFAIK 设备文件是用户态进程访问设备的唯一选择。内核并不关心该进程是否是 shell。

C 程序有一个用于微调设备访问的选项:调用ioctl

man 2 ioctl:

int ioctl(int d, unsigned long request, ...);

也许有一个外壳包装器,但我不知道有什么。

> strace fdisk -l /dev/sda
[...]
open("/dev/sda", O_RDONLY|O_CLOEXEC)    = 3
[...]
ioctl(3, BLKGETSIZE64, 500107862016)    = 0
[...]
ioctl(3, CDROM_GET_CAPABILITY or SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT, 0) = -1 ENOTTY (Inappropriate ioctl for device)
ioctl(3, BLKALIGNOFF, 0)                = 0
ioctl(3, BLKIOMIN, 4096)                = 0
ioctl(3, BLKIOOPT, 0)                   = 0
ioctl(3, BLKPBSZGET, 4096)              = 0
ioctl(3, BLKSSZGET, 512)                = 0
ioctl(3, BLKSSZGET, 512)                = 0
uname({sys="Linux", node="inno", ...})  = 0
ioctl(3, BLKGETSIZE64, 500107862016)    = 0
ioctl(3, HDIO_GETGEO, {heads=255, sectors=63, cylinders=60801, start=0}) = 0

相关内容