2014-09-14 3 views
-6

가상 소프트웨어 라우터를 구현하는 프로그램을 작성 중입니다. 내 C 프로그래밍 기술은 그리 좋지 않습니다. 뼈대 코드를 살펴볼 때 다음과 같이 나타났습니다.관련 C의 구조에 대한 포인터

struct ip *ippacket = (struct ip*) (packet + sizeof(struct sr_ethernet_hdr)); 

아무도 정확하게 설명 할 수 있습니까?

+1

이해할 수없는 부분은 무엇입니까? – ruakh

+1

당신이 이해하지 못하는 언어로 가상 소프트웨어 라우터를 만들고 있습니까? 이것은 잘 끝낼 수 없습니다. –

+0

@CaptainObvlious : 죄송합니다. 내가 너무 바보 같다면. 하지만 나는 그것을 배우고 싶습니다. 나는 C 프로그래밍에 너무 순진한 것은 아니지만, 포인터를 다루는 것에 능숙하지 않습니다. 그래서 질문이 생겼어. 확실히 지원이 필요해. 글쎄, 나는 지금부터 기본적인 질문을 제기하지 않을 것이다. –

답변

1

잘 이해하려면 "포인터 산술"을 찾으십시오.

'packet'이 패킷에 대한 포인터 인 경우 이는 패킷 헤더의 크기를 더하기 때문에 'ippacket'결과는 패킷 헤더 다음에 오는 첫 번째 바이트에 대한 포인터가됩니다.

+0

감사합니다. –

0

struct ip의 주소를 가리키는 포인터 ippacket은 해당 주소를 올바른 유형으로 캐스팅 한 후 주소 packet + sizeof(struct sr_ethernet_hdr)을 가리 키도록 초기화됩니다.

stackoverflow에서 이런 종류의 질문을하지 않아야합니다. 커뮤니티에 기여하지 않으며 도움이 되기에는 너무 기본입니다. 또한 가상 라우터를 작성하는 경우 이미 이런 종류의 것을 알아야합니다!

1

확실하게 대답하려면 변수 packet이 어떻게 선언되었는지 알고 있어야합니다. 예를 들어 char* packet과 같이 크기 1 유형에 대한 포인터라고 가정합니다.

packetstruct ip 뒤에 struct sr_ethernet_hdr 시작 메모리 블록을 가리키는 것으로하고, 그 ippacketstruct ip 가리 것을 바람직한 것으로 보인다.