2008년 11월 25일 화요일

ioctl() 함수

Ioctl 인터페이스는 모든 장치 드라이버가 공유하는 하나의 시스템 콜을 할당함으로써 이 문제를 피할 수 있게 도와 준다. 이러한 시스템 콜을 통해 다양한 장치의 특정한 요청의 방향을 바꿀 수 있다. 그러므로 커널은 관리가 불가능한 시스템 콜 테이블을 만들지 않고도 유동적으로 장치에 대한 콜을 처리할 수 있다.

유닉스

유닉스의 ioctl 콜은 다음과 같은 매개 변수를 취한다.

  1. 열려 있는 파일 서술자
  2. 요청 코드 번호
  3. 드라이버 서명이 되지 않은 정수값, 또는 포인터

Win32

Win32 DeviceIoContrl은 다음과 같은 매개 변수를 취한다.

  1. 열려 있는 객체 관리 (파일 서술자와 동등)
  2. 요청 코드 번호 (제어 코드)
  3. 입력 매개 변수를 위한 버퍼
  4. 출력 결과를 위한 버퍼
  5. OVERLAPPED 구조 (오버랩 입출력이 쓰이는 경우)


이름

ioctl - 장치를 제어한다.  

사용법

#include <sys/ioctl.h>

int ioctl(int d, int request, ...)

[세번째 인자는 전통적으로 char *argp 이며, 설명를 위해 그렇게 언급하겠다.]  

설명

ioctl 함수는 특수 파일의 장치 인자를 조절한다. 특히, 문자 특수 파일(예로 터미널)의 많은 특징적인 동작은 ioctl의 요구에 의해 제어된다. d 인자는 반드시 열린 파일 기술자이어야 한다.

ioctl request는 인자가 입력되는 인자인지 출력되는 인자인지와 argp 인자의 바이트 단위의 크기를 나타낸다. ioctl request를 나타내기 사용되는 매크로와 상수는 <sys/ioctl.h>파일에 정의되어 있다.

반환값

성공시, 0이 리턴된다. 에러시, -1이 리턴되며, errno는 적당한 값으로 설정된다.  


로지텍 Cam sphere (pan tilt) 직접 제어

dev (파일 디스크립터 번호) 와 control_s 구조체 정의 및 값을 설정 해야함 ( 다음 글에 게시 )
ioctl(dev, VIDIOC_S_CTRL,&control_s);

댓글 없음:

댓글 쓰기