관련 헤더
#include <sys/ioctl.h>
#include <net/if.h>
설명
linux에서 네트워크 장치의 설정과 관련된 대부분의 ioctl( ) 호출에 세번째 인자로 사용하는 구조체이다.
참고로, linux의 ioctl( ) 호출시 첫번째 인자는 file descriptor인데, family나 type과 관계없이 어떠한 소켓 file descriptor라도 사용할 수 있다.
구조체의 멤버변수는 아래와 같다.
struct ifreq {
char ifr_name[IFNAMSIZ]; /* Interface name */
union {
struct sockaddr ifr_addr;
struct sockaddr ifr_dstaddr;
struct sockaddr ifr_broadaddr;
struct sockaddr ifr_netmask;
struct sockaddr ifr_hwaddr;
short ifr_flags;
int ifr_ifindex;
int ifr_metric;
int ifr_mtu;
struct ifmap ifr_map;
char ifr_slave[IFNAMSIZ];
char ifr_newname[IFNAMSIZ];
char *ifr_data;
};
};
일반적으로 개발자는, ioctl( )의 대상으로 삼고자 하는 인터페이스의 이름을 ifr_name에 설정한다.
그 외의 다른 멤버 변수들은 union 이다.
즉, 멤버 변수 ifr_name만 IFNAMSIZ 만큼의 메모리를 차지하고, 그 외는 메모리공간을 공유한다. (시작 번지가 같다)
알려진 버그
glibc 2.1를 사용하는 경우, 헤더 net/if.h 파일에 'ifr_newname' 매크로가 누락되어 있다.
따라서 컴파일 타임 에러가 발생할 수 있다.
임시로 아래 코드를 추가하여 컴파일 에러를 해결할 수 있다.
#ifndef ifr_newname
#define ifr_newname ifr_ifru.ifru_slave
#endif
'개발자의 기록 노트 > C' 카테고리의 다른 글
[네트워크/C reference] inet_ntop 함수 (0) | 2017.11.02 |
---|---|
[C][CURL] CURLOPT_FOLLOWLOCATION 의 버전별 동작 차이 (0) | 2017.08.31 |
[네트워크/C] addrinfo 구조체 (0) | 2017.06.16 |
[네트워크/C] getaddrinfo 함수 (0) | 2017.06.16 |
[네트워크/C] sockaddr, sockaddr_in, sockaddr_un 구조체 - 소켓 주소 정보를 나타낸다 (1) | 2017.06.14 |
[C] 저수준 파일 입출력 (0) | 2011.10.03 |