2009-11-02 2 views
3

좋은 시간.Mac + Ruby : Socket의 ioctl에 액세스 할 수 없습니까? 어떻게 고치는 지?

루비 코드 :

무엇을 할
def hw_address(iface) 
    sock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM,0) 

    buf = [iface,""].pack('a16h16') 
    sock.ioctl(SIOCGIFHWADDR, buf); 

    sock.close 

    return buf[18..24].to_etheraddr 
end 

puts hw_address('lo0') 

: 인터페이스의 MAC 주소를 가져옵니다.

예상대로 Debian에서 작동합니다. 그러나 맥 OS X에, 메신저 오류가 :``IOCTL '운영 소켓 (errno를 :: EOPNOTSUPP)에서 지원되지`

이 오류 메시지가 소켓에 ioctl 작업 얻을 &/수정 통과 어쨌든이 있나요?

+2

SIOCGIFHWADDR의 정의는 어디서 얻습니까? 내 Mac에서 이것은 시스템 헤더 파일에서도 정의 된 것처럼 보이지 않습니다. sockio.h에 SIOCGLIFADDR이 있는데 같은 일을하는 것처럼 보이지만 (루비에서 액세스하는 방법을 모르겠습니다). – SteveRawlinson

+0

감사합니다. freebsd의 출처에서 가져 왔습니다. –

답변

0

http://hintsforums.macworld.com/showthread.php?t=97909

"다음 함수는 [S] 맥 OS X에서 사용할 수 없습니다 :

1) 실시간 -librt POSIX 타이머 라이브러리() 명령 SIOCGIFHWADDR와 2) IOCTL - 맥을 얻으려면 네트워크 인터페이스의 주소. "

C'est la vie.

+0

2 년 + 26 일 동안 고마워 답변 : –

+0

나중에 다시 생각해 보면, 내가 생각할 때, 나는 똑같은 질문을했고, 대답을 찾았으며, 그것을 기록하기 위해 동그라미를 .다. –

관련 문제