几个容易混淆的数据结构

套接字编程常遇到这几个数据结构:sockaddr、sockaddr_in和in_addr,很容易让人范糊涂。现将这几个结构的定义摘录于下:、

/*
 * Structure used by kernel to store most
 * addresses.
 */
struct sockaddr {
        u_short sa_family;              /* address family */
        char    sa_data[14];            /* up to 14 bytes of direct address */
};

/*
 * Socket address, internet style.
 */
struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};

//
// IPv4 Internet address
// This is an ‘on-wire‘ format structure.
//
typedef struct in_addr {
        union {
                struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
                struct { USHORT s_w1,s_w2; } S_un_w;
                ULONG S_addr;
        } S_un;
#define s_addr  S_un.S_addr /* can be used for most tcp & ip code */
#define s_host  S_un.S_un_b.s_b2    // host on imp
#define s_net   S_un.S_un_b.s_b1    // network
#define s_imp   S_un.S_un_w.s_w2    // imp
#define s_impno S_un.S_un_b.s_b4    // imp #
#define s_lh    S_un.S_un_b.s_b3    // logical host
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;

首先sockaddr是通用的套接字地址,具体代表的含义要看sa_family成员变量,sockaddr_in是针对internet设计的数据结构,如果sa_family是AF_INET,可直接将sockaddr指针转换成sockaddr_in指针。in_addr仅用于表示IPV4网络地址,也就是常说的IP地址。

时间: 2024-10-21 06:41:04

几个容易混淆的数据结构的相关文章

android 反编译 混淆过程中注意事项

此文源自组内成员分享的PPT,其他成员的文档由于没有得到授权,暂不公开. 本文命令如果没有特殊注明,均为windows 7环境. 本文只涉及大概的知识点,不涉及具体的细节,需要注意. 反编译 apktool 可反编译资源文件(xml,点九图)以及代码为smali代码 使用命令:apktool d xxx.apk output_filepath dex2jar 反编译dex文件(解压apk获得的classes.dex)为jar 使用命令:dex2jar xxx.dex jd-gui 查看jar文件

第一次作业:在不热爱里寻找热爱

宁鸣而死,不默而生. 结缘计算机 说起选择计算机的原因着实有点惭愧了.大抵是因为对于高中打字速度的沾沾自喜再加上一点儿计算机统考得了A的膨胀,以及高中老师常常挂在嘴边的"女生学理工科真的太辛苦了! ",让天生反骨的我在报考专业的时候毫不犹豫的填了一堆不感兴趣的专业. 我的条件可能就是没有条件吧,选工科时那些"我要证明自己和那些普通女生不一样"的奇奇怪怪的想法早就在大学一次次期末考试的挑灯夜读里被磨平了,我想我和那些按部就班的学习文科的女生一样,不太能吃苦,不太适合坐

数据结构-王道2017-第2章 线性表

1. 线性表的定义和基本操作 1.1 线性表的定义 线性表电话i具有相同数据类型的n(n >= 0)个数据元素的有限序列.其中n为表长,当n=0时,该线性表是一个空表.若用L命名线性表,则一般表示为: L=(a1,a2,a3...ai,ai+1...an) 其中,a1是唯一的第一个数据元素,又称为表头元素:an是唯一的最后一个数据元素,又称为表尾元素.除第一个元素外,每个元素有且仅有一个直接前驱.除最后一个元素外,每个元素有且仅有一个直接后继.以上就是线性表的逻辑特性,这种线性有序的逻辑结构正是

48. 蛤蟆的数据结构笔记之四十八的有向无环图的应用关键路径

48. 蛤蟆的数据结构笔记之四十八的有向无环图的应用关键路径 本篇名言:"富贵不淫贫贱乐 ,男儿到此是豪雄.-- 程颢" 这次来看下有向无环图的另一个应用关键路径. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47135061 1.  关键路径 与AOV-网相对应的是AOE-网(Activity On Edge)即边表示活动的网.AOE-网是一个带权的有向无环图,其中,顶点表示事件(Event),弧表示活动,权表

易混淆名词辨析

以前学习总是懒得查,懒得问,很多名词都不知道是干嘛的,学的越来越多,混得越来越厉害.这次在学习Asp.net和Javascript中又接触到一些,借此机会,把这些学过的都对比和归纳一下. ADO与ADO.NET ADO: 这是第一年做那五个实例的时候用到过的吧,当时对于连接数据库并不太懂.其实ADO就是应用程序和数据源打交道时中间借助的那么一种东东,通过它我们就可以取出数据库中的数据,当然还可以对数据进行操作然后再保存到数据库. ActiveX DataObjects,一种程序对象,用于表示用户

大话数据结构(一)——绪论

数据结构起源: 程序设计=数据结构+算法. 基本概念: 1.数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别的,并输入给计算机处理的符号.数据不仅仅包含整型.实型等数值型,还包括字符和声音.图像.视频等非数值类型. 2.数据元素:是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理.也被称为记录.比如,在人类中,人就是数据元素. 3.数据项:一个数据元素可以由若干个数据项组成,比如人这个数据元素,可以由眼睛.耳朵.鼻子.等这些数据项组成. 数据项是数据不可分割的最

Linux 网卡驱动学习(net_device 等数据结构)

[摘要]前文对网络驱动例子进行一个简单的梳理总结,本文贴出 net_device 的数据结构以及一些驱动中常用的数据结构. 1.网络设备驱动结构 下图摘自http://blog.chinaunix.net/uid-20672257-id-3147768.html 1).网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过netif_rx()函数接受数据.这一层的存在使得上层协议独立于具体的设备. 2).网

javascript实现数据结构:线索二叉树

遍历二叉树是按一定的规则将树中的结点排列成一个线性序列,即是对非线性结构的线性化操作.如何找到遍历过程中动态得到的每个结点的直接前驱和直接后继(第一个和最后一个除外)?如何保存这些信息? 设一棵二叉树有n个结点,则有n-1条边(指针连线) , 而n个结点共有2n个指针域(Lchild和Rchild) ,显然有n+1个空闲指针域未用.则可以利用这些空闲的指针域来存放结点的直接前驱和直接后继信息. 对结点的指针域做如下规定: 1.若结点有左子树,则其leftChild域指示其左孩子,否则令leftC

数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉搜索树.红黑树.线索二叉树,它们在解决实际问题中有着非常重要的应用.本文主要从概念和一些基本操作上进行分类和总结. 一.概念总揽 (1) 堆 堆(heap order)是一种特殊的表,如果将它看做是一颗完全二叉树的层次序列,那么它具有如下的性质:每个节点的值都不大于其孩子的值,或每个节点的值都不小于其孩子的值