我来自巴西,正在学习Linux中的网络套接字编程。我很困惑,因为我不明白这个命令是做什么的:
char datagram[4096];
struct iphdr *iph = (struct iphdr *)datagram;
变量datagam
在struct iphdr *iph = (struct iphdr *)
之后做什么?我无法理解它背后的编程逻辑。
我在试着破译它背后的程序逻辑。最初我认为iph
指针将指向结构iphdr
的所有成员,同时它也将指向datagram
变量。但我试图通过指针访问datagram
值,但我不能。
2条答案
按热度按时间2uluyalo1#
第一行为一个4KB的IP数据报分配内存。数据报在开头有一个报头,
iph
指针可以用来通过iphdr
结构的成员按名称访问报头的字段。这可能会与原始套接字一起使用,因为这是通常使IP头对套接字代码可见的唯一方法。
20jt8wwn2#
我附上了一个示例代码,以便更好地理解。
结果是
你必须搜索和理解C结构中的内存分配和C结构的位字段。
正如你提到的,值可以是,并且应该通过结构指针和字符指针访问。
但是,如果您无法访问数据报值,则会出现其他问题。
请检查printf的格式说明符或尝试通过索引从数据报数组中获取数据。