#include<sys/ioctl.h> 에서 ioctl 함수 특징

kyungminLim·2024년 5월 23일
0

'ioctl' 함수에 대한 설명

'ioctl' 함수 호출은 다양한 device에 대한 제어 명령을 수행하는데 사용된다. 이 호출에서 'ioctl'은 block device의 크기를 가져오기 위해 사용된다. 이를 이해하기 위해 호출의 각 부분을 분석해보고 예시를 통해 자세한 설명을 하겠다.

// #include <sys/ioctl.h> 의 헤더파일에 ioctl이 있다.

int ioctl(int fd, unsigned long request, ...);
  • 'fd' : device에 대한 file descriptor이다.
  • 'request' : 수행할 작업을 지정하는 요청 코드이다.
  • 추가 인자 : request code에 따라 추가적인 인자가 필요할 수 있다.
ioctl(trace->fd, BLKGETSIZE64, &trace->total_capacity);

이 코드는 실제로 trace code에서 사용되는 ioctl이다.
1. 'trace->fd' : 이 file descriptor는 block device를 나타낸다. 이 descriptor는 이전에 'disk_open' 함수로 열렸고, 예를 들면 /dev/sda 혹은 /dev/nvme0n1 등이 될 수 있다.
2. 'BLKGETSIZE64' : 이 request codesms 'ioctl' 함수에 block device의 크기를 byte 단위로 가져오라는 명령이다.
3. '&trace->total_capacity' : 이 포인터는 block device의 크기를 저장할 메모리 주소를 가리킨다.

동작을 요약하자면, 'ioctl' 함수는 'trace->fd'로 지정된 block device에 'BLKGETSIZE64' 요청을 보내고 block device driver는 device의 총 크기를 byte 단위로 계산하여
'trace->total_capacity'에 저장한다. 함수가 성공적으로 완료되면, 'trace->total_capacity'는 block device의 총 크기를 나타낸다.

return 값은 호출이 성공하면 0을 return, 실패할 경우 -1을 return하며 'errno'를 설정한다.
실패 시, 오류 원인을 확인하려면 'errno' 값을 조사하면 된다.

'BLKGETSIZE64'

'BLKGETSIZE64'는 block device의 총 크기를 byte 단위로 가져오는 request code이다. 주로 linux kernel에서 지원하며, 특정 block device에 대한 정보를 얻는 데 사용된다.

0개의 댓글