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