참조 : http://wiki.kldp.org/KoreanDoc/html/EmbeddedKernel-KLDP/device-understanding.html
참조 : http://blog.naver.com/hajiheon/19411640
참조 : http://blog.naver.com/hajiheon/19411640
참조 : http://ieplab.snu.ac.kr/~alphard/work/dynamic_kernel_1.html
ioctl(unsigned int fd,unsigned intrequest, long argument)
ioctl은 input/output contrl을 의미하며 파일 디스크립터 (filedescriptor)를 가지고 캐릭터 디바이스
(character device)를 조종하는데 사용된다.
(캐릭터 디바이스는 파일로 볼 수 있는, 읽어 들이거나 써넣을 수 있는 것들 콘솔(모니터와 키보드 등)
그리고 직렬/병렬 포트들은 캐릭터 디바이스들이다. /dev/tty0, dev/cua0 파일 등을 통해 캐릭터 디바이스에
접근할 수 있다. 캐릭터 디바이스는 순차적으로만 접근할 수 있는 것이 보통이다.)
ioctl의 형태는 ioctl(unsigned int fd,unsigned int request, long argument) 이다.
에러시 -1 반환 , 다른 시스템 호출과 같이 요청이 성공하면 0보다 크거나 같은값 리턴
커널은 특수 파일 (special file)이나 일반 파일들(regular files)과 구분된다. 특수 파일 (special file)은
주로 /dev나 /proc 디렉토리에서 찾을 수 있다. 이 파일들은 드라이버아 의 인터페이스를 숨기고 있고
텍스트나 이진 데이타를 포함하는 실제(일반) 파일이 아니라는 점에서 일반 파일 (regualar file)과 다르다.
이러한 점은 유닉스의 철학이고 모든 파일에 대해서 정상적으로 읽기/쓰기 동작의 사용을 허락한다.
그러나 특수 파일이나 일반 파일을 가지고 그 이상의 일을 하고자 한다면 ioctl를 가지고 할 수 있다.
일반 파일 보다는 특수 파일에 대해 ioctl이 종종 더 많이 필요할테지만 일반 파일에 대해서도
ioctl의 사용이 가능하다.
에러 :
* EBADF d 는 유효한 기술자가 아니다.
* EFAULT argp는 접근할 수 없는 메모리 영역을 참조한다.
* ENOTTY d는 문자 특수 파일과 연관 되어 있지 않다.
* ENOTTY 명시한 request는 파일 기술자 d에 해당하는 객체에 적용되지 않는다.
* EINVAL request 또는 argp가 유효하지 않다.
request 매크로와 상수 (fedora 14 기준)
/* Routing table calls. */
#define SIOCADDRT 0x890B /* add routing table entry */
#define SIOCDELRT 0x890C /* delete routing table entry */
#define SIOCRTMSG 0x890D /* call to routing system */
ioctl(unsigned int fd,unsigned intrequest, long argument)
ioctl은 input/output contrl을 의미하며 파일 디스크립터 (filedescriptor)를 가지고 캐릭터 디바이스
(character device)를 조종하는데 사용된다.
(캐릭터 디바이스는 파일로 볼 수 있는, 읽어 들이거나 써넣을 수 있는 것들 콘솔(모니터와 키보드 등)
그리고 직렬/병렬 포트들은 캐릭터 디바이스들이다. /dev/tty0, dev/cua0 파일 등을 통해 캐릭터 디바이스에
접근할 수 있다. 캐릭터 디바이스는 순차적으로만 접근할 수 있는 것이 보통이다.)
ioctl의 형태는 ioctl(unsigned int fd,unsigned int request, long argument) 이다.
에러시 -1 반환 , 다른 시스템 호출과 같이 요청이 성공하면 0보다 크거나 같은값 리턴
커널은 특수 파일 (special file)이나 일반 파일들(regular files)과 구분된다. 특수 파일 (special file)은
주로 /dev나 /proc 디렉토리에서 찾을 수 있다. 이 파일들은 드라이버아 의 인터페이스를 숨기고 있고
텍스트나 이진 데이타를 포함하는 실제(일반) 파일이 아니라는 점에서 일반 파일 (regualar file)과 다르다.
이러한 점은 유닉스의 철학이고 모든 파일에 대해서 정상적으로 읽기/쓰기 동작의 사용을 허락한다.
그러나 특수 파일이나 일반 파일을 가지고 그 이상의 일을 하고자 한다면 ioctl를 가지고 할 수 있다.
일반 파일 보다는 특수 파일에 대해 ioctl이 종종 더 많이 필요할테지만 일반 파일에 대해서도
ioctl의 사용이 가능하다.
에러 :
* EBADF d 는 유효한 기술자가 아니다.
* EFAULT argp는 접근할 수 없는 메모리 영역을 참조한다.
* ENOTTY d는 문자 특수 파일과 연관 되어 있지 않다.
* ENOTTY 명시한 request는 파일 기술자 d에 해당하는 객체에 적용되지 않는다.
* EINVAL request 또는 argp가 유효하지 않다.
request 매크로와 상수 (fedora 14 기준)
/* Routing table calls. */
#define SIOCADDRT 0x890B /* add routing table entry */
#define SIOCDELRT 0x890C /* delete routing table entry */
#define SIOCRTMSG 0x890D /* call to routing system */
/* Socket configuration controls. */
#define SIOCGIFNAME 0x8910 /* get iface name */
#define SIOCSIFLINK 0x8911 /* set iface channel */
#define SIOCGIFCONF 0x8912 /* get iface list */
#define SIOCGIFFLAGS 0x8913 /* get flags */
#define SIOCSIFFLAGS 0x8914 /* set flags */
#define SIOCGIFADDR 0x8915 /* get PA address */
#define SIOCSIFADDR 0x8916 /* set PA address */
#define SIOCGIFDSTADDR 0x8917 /* get remote PA address */
#define SIOCSIFDSTADDR 0x8918 /* set remote PA address */
#define SIOCGIFBRDADDR 0x8919 /* get broadcast PA address */
#define SIOCSIFBRDADDR 0x891a /* set broadcast PA address */
#define SIOCGIFNETMASK 0x891b /* get network PA mask */
#define SIOCSIFNETMASK 0x891c /* set network PA mask */
#define SIOCGIFMETRIC 0x891d /* get metric */
#define SIOCSIFMETRIC 0x891e /* set metric */
#define SIOCGIFMEM 0x891f /* get memory address (BSD) */
#define SIOCSIFMEM 0x8920 /* set memory address (BSD) */
#define SIOCGIFMTU 0x8921 /* get MTU size */
#define SIOCSIFMTU 0x8922 /* set MTU size */
#define SIOCSIFNAME 0x8923 /* set interface name */
#define SIOCSIFHWADDR 0x8924 /* set hardware address */
#define SIOCGIFENCAP 0x8925 /* get/set encapsulations */
#define SIOCSIFENCAP 0x8926
#define SIOCGIFHWADDR 0x8927 /* Get hardware address */
#define SIOCGIFSLAVE 0x8929 /* Driver slaving support */
#define SIOCSIFSLAVE 0x8930
#define SIOCADDMULTI 0x8931 /* Multicast address lists */
#define SIOCDELMULTI 0x8932
#define SIOCGIFINDEX 0x8933 /* name -> if_index mapping */
#define SIOGIFINDEX SIOCGIFINDEX /* misprint compatibility :-) */
#define SIOCSIFPFLAGS 0x8934 /* set/get extended flags set */
#define SIOCGIFPFLAGS 0x8935
#define SIOCDIFADDR 0x8936 /* delete PA address */
#define SIOCSIFHWBROADCAST 0x8937 /* set hardware broadcast addr */
#define SIOCGIFCOUNT 0x8938 /* get number of devices */
#define SIOCGIFNAME 0x8910 /* get iface name */
#define SIOCSIFLINK 0x8911 /* set iface channel */
#define SIOCGIFCONF 0x8912 /* get iface list */
#define SIOCGIFFLAGS 0x8913 /* get flags */
#define SIOCSIFFLAGS 0x8914 /* set flags */
#define SIOCGIFADDR 0x8915 /* get PA address */
#define SIOCSIFADDR 0x8916 /* set PA address */
#define SIOCGIFDSTADDR 0x8917 /* get remote PA address */
#define SIOCSIFDSTADDR 0x8918 /* set remote PA address */
#define SIOCGIFBRDADDR 0x8919 /* get broadcast PA address */
#define SIOCSIFBRDADDR 0x891a /* set broadcast PA address */
#define SIOCGIFNETMASK 0x891b /* get network PA mask */
#define SIOCSIFNETMASK 0x891c /* set network PA mask */
#define SIOCGIFMETRIC 0x891d /* get metric */
#define SIOCSIFMETRIC 0x891e /* set metric */
#define SIOCGIFMEM 0x891f /* get memory address (BSD) */
#define SIOCSIFMEM 0x8920 /* set memory address (BSD) */
#define SIOCGIFMTU 0x8921 /* get MTU size */
#define SIOCSIFMTU 0x8922 /* set MTU size */
#define SIOCSIFNAME 0x8923 /* set interface name */
#define SIOCSIFHWADDR 0x8924 /* set hardware address */
#define SIOCGIFENCAP 0x8925 /* get/set encapsulations */
#define SIOCSIFENCAP 0x8926
#define SIOCGIFHWADDR 0x8927 /* Get hardware address */
#define SIOCGIFSLAVE 0x8929 /* Driver slaving support */
#define SIOCSIFSLAVE 0x8930
#define SIOCADDMULTI 0x8931 /* Multicast address lists */
#define SIOCDELMULTI 0x8932
#define SIOCGIFINDEX 0x8933 /* name -> if_index mapping */
#define SIOGIFINDEX SIOCGIFINDEX /* misprint compatibility :-) */
#define SIOCSIFPFLAGS 0x8934 /* set/get extended flags set */
#define SIOCGIFPFLAGS 0x8935
#define SIOCDIFADDR 0x8936 /* delete PA address */
#define SIOCSIFHWBROADCAST 0x8937 /* set hardware broadcast addr */
#define SIOCGIFCOUNT 0x8938 /* get number of devices */
#define SIOCGIFBR 0x8940 /* Bridging support */
#define SIOCSIFBR 0x8941 /* Set bridging options */
#define SIOCSIFBR 0x8941 /* Set bridging options */
#define SIOCGIFTXQLEN 0x8942 /* Get the tx queue length */
#define SIOCSIFTXQLEN 0x8943 /* Set the tx queue length */
/* ARP cache control calls. */
/* 0x8950 - 0x8952 * obsolete calls, don't re-use */
#define SIOCDARP 0x8953 /* delete ARP table entry */
#define SIOCGARP 0x8954 /* get ARP table entry */
#define SIOCSARP 0x8955 /* set ARP table entry */
#define SIOCSIFTXQLEN 0x8943 /* Set the tx queue length */
/* ARP cache control calls. */
/* 0x8950 - 0x8952 * obsolete calls, don't re-use */
#define SIOCDARP 0x8953 /* delete ARP table entry */
#define SIOCGARP 0x8954 /* get ARP table entry */
#define SIOCSARP 0x8955 /* set ARP table entry */
/* RARP cache control calls. */
#define SIOCDRARP 0x8960 /* delete RARP table entry */
#define SIOCGRARP 0x8961 /* get RARP table entry */
#define SIOCSRARP 0x8962 /* set RARP table entry */
#define SIOCDRARP 0x8960 /* delete RARP table entry */
#define SIOCGRARP 0x8961 /* get RARP table entry */
#define SIOCSRARP 0x8962 /* set RARP table entry */
/* Driver configuration calls */
#define SIOCGIFMAP 0x8970 /* Get device parameters */
#define SIOCSIFMAP 0x8971 /* Set device parameters */
#define SIOCSIFMAP 0x8971 /* Set device parameters */
/* DLCI configuration calls */
#define SIOCADDDLCI 0x8980 /* Create new DLCI device */
#define SIOCDELDLCI 0x8981 /* Delete DLCI device */
#define SIOCDELDLCI 0x8981 /* Delete DLCI device */
/* Device private ioctl calls. */
#define SIOCDEVPRIVATE 0x89F0 /* to 89FF */
#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */
#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */
'TCP/IP' 카테고리의 다른 글
Nagle 알고리즘 (0) | 2011.05.02 |
---|---|
getsockopt() , setopt () 함수 (0) | 2011.05.02 |
소켓 함수 및 헤더들 (0) | 2011.02.07 |
sendto() (0) | 2010.03.28 |
SOCKADDR_IN 구조체 (0) | 2010.03.28 |
SOCKET() 함수 (0) | 2010.03.25 |
Linux: SOCK_PARCKET (0) | 2009.12.03 |
ICMP 프로토콜 (0) | 2009.11.16 |
인터넷 소켓 활용 (0) | 2009.08.31 |
TCP/IP 열혈 강의 (0) | 2009.08.12 |