プログラマはプログラムでデバイスファイルをデバイスドライバへのインタフェースとして使用しますか?

プログラマはプログラムでデバイスファイルをデバイスドライバへのインタフェースとして使用しますか?

Linuxシェルでは、ユーザーはデバイスファイルをインターフェイス経由でデバイスドライバにアクセスできます。

Linux CプログラマがCプログラムのドライバにアクセスしようとしたときに、デバイスファイルをインターフェイスを介してドライバにもアクセスしますか?

つまり、デバイスファイルは、Cプログラムではなくシェルでのみデバイスドライバへのインターフェイスですか、それとも両方ですか?

ベストアンサー1

AFAIKデバイスファイルは、ユーザープロセスがデバイスにアクセスする唯一のオプションです。カーネルはプロセスがシェルかどうか気にしません。

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

おすすめ記事