玩转内核链表list_head,教你管理不同类型节点的实现,建议收藏
面包芯语 2023-05-31 12:57:40

点击左上方蓝色“一口Linux”,选择“设为星标”

在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用,有点类似于C++的继承机制(希望有机会写篇文章研究一下C语言的面向对象机制)。


(资料图)

首先找到list_head结构体定义,kernel/inclue/linux/types.h 如下:

需要注意的一点是,头结点head是不使用的,这点需要注意。

使用list_head组织的链表的结构如下图所示:

然后就开始围绕这个结构开始构建链表,然后插入、删除节点 ,遍历整个链表等等,其实内核已经提供好了现成的接口,接下来就让我们进入 kernel/include/linux/list.h中:

一. 创建链表

内核提供了下面的这些接口来初始化链表:

如: 可以通过 LIST_HEAD(mylist) 进行初始化一个链表,mylist的prev 和 next 指针都是指向自己。

但是如果只是利用mylist这样的结构体实现链表就没有什么实际意义了,因为正常的链表都是为了遍历结构体中的其它有意义的字段而创建的,而我们mylist中只有 prev和next指针,却没有实际有意义的字段数据,所以毫无意义。

综上,我们可以创建一个宿主结构,然后在此结构中再嵌套mylist字段,宿主结构又有其它的字段(进程描述符 task_struct,页面管理的page结构,等就是采用这种方法创建链表的)。为简便理解,定义如下:

创建链表,并初始化

这样我们的链表就初始化完毕,链表头的myhead就prev 和 next指针分别指向myhead自己了,如下图:

二. 添加节点

内核已经提供了添加节点的接口了

1. list_add

如下所示。根据注释可知,是在链表头head后方插入一个新节点new。

list_add再调用__list_add接口

其实就是在myhead链表头后和链表头后第一个节点之间插入一个新节点。然后这个新的节点就变成了链表头后的第一个节点了。

接着上面步骤创建1个节点然后插入到myhead之后

然后在创建第二个节点,同样把它插入到header_task之后

list_add

以此类推,每次插入一个新节点,都是紧靠着header节点,而之前插入的节点依次排序靠后,那最后一个节点则是第一次插入header后的那个节点。最终可得出:先来的节点靠后,而后来的节点靠前,“先进后出,后进先出”。所以此种结构类似于 stack“堆栈”, 而header_task就类似于内核stack中的栈顶指针esp,它都是紧靠着最后push到栈的元素。

2. list_add_tail 接口

上面所讲的list_add接口是从链表头header后添加的节点。同样,内核也提供了从链表尾处向前添加节点的接口list_add_tail.让我们来看一下它的具体实现。

从注释可得出:(1)在一个特定的链表头前面插入一个节点

(2)这个方法很适用于队列的实现(why?)

进一步把__list_add()展开如下:

所以,很清楚明了, list_add_tail就相当于在链表头前方依次插入新的节点(也可理解为在链表尾部开始插入节点,此时,header节点既是为节点,保持不变)

利用上面分析list_add接口的方法可画出数据结构图形如下。

(1)创建一个链表头(实际上应该是表尾)代码参考第一节;

(2)插入第一个节点 node1.list , 调用

(3) 插入第二个节点node2.list,调用

list_add_tail

依此类推,每次插入的新节点都是紧挨着 header_task表尾,而插入的第一个节点my_first_task排在了第一位,my_second_task排在了第二位,可得出:先插入的节点排在前面,后插入的节点排在后面,“先进先出,后进后出”,这不正是队列的特点吗(First in First out)!

三. 删除节点

内核同样在list.h文件中提供了删除节点的接口 list_del(), 让我们看一下它的实现流程

利用list_del(struct list_head *entry) 接口就可以删除链表中的任意节点了,但需注意,前提条件是这个节点是已知的,既在链表中真实存在,切prev,next指针都不为NULL。

四. 链表遍历

内核是同过下面这个宏定义来完成对list_head链表进行遍历的,如下 :

上面这种方式是从前向后遍历的,同样也可以使用下面的宏反向遍历:

而且,list.h 中也提供了list_replace(节点替换) list_move(节点移位),翻转,查找等接口,这里就不在一一分析了。

五. 宿主结构

1.找出宿主结构 list_entry(ptr, type, member)

上面的所有操作都是基于list_head这个链表进行的,涉及的结构体也都是:

其实,正如文章一开始所说,我们真正更关心的是包含list_head这个结构体字段的宿主结构体,因为只有定位到了宿主结构体的起始地址,我们才能对对宿主结构体中的其它有意义的字段进行操作。

那我们如何根据list这个字段的地址而找到宿主结构node1的位置呢?list.h中定义如下:

list.h中提供了list_entry宏来实现对应地址的转换,但最终还是调用了container_of宏,所以container_of宏的伟大之处不言而喻。

2 container_of

做linux驱动开发的同学是不是想到了LDD3这本书中经常使用的一个非常经典的宏定义!

在LDD3这本书中的第三章字符设备驱动,以及第十四章驱动设备模型中多次提到,我觉得这个宏应该是内核最经典的宏之一。那接下来让我们揭开她的面纱:

此宏在内核代码 kernel/include/linux/kernel.h中定义(此处kernel版本为3.10;新版本4.13之后此宏定义改变,但实现思想保持一致)

而offsetof定义在kernel/include/linux/stddef.h,如下:

举个例子,来简单分析一下container_of内部实现机制。

例如:

展开container_of宏,探究内部的实现:

(1) 获取成员变量b的类型 ,这里获取的就是short 类型。这是GNU_C的扩展语法。

(2) 用获取的变量类型,定义了一个指针变量 __mptr ,并且将成员变量 b的首地址赋值给它

(3) 这里的offsetof(struct test,b)是用来计算成员b在这个struct test 结构体的偏移。__mptr

是成员b的首地址, 现在 减去成员b在结构体里面的偏移值,算出来的是不是这个结构体的

首地址呀 。

3. 宿主结构的遍历

我们可以根据结构体中成员变量的地址找到宿主结构的地址,并且我们可以对成员变量所建立的链表进行遍历,那我们是不是也可以通过某种方法对宿主结构进行遍历呢?

答案肯定是可以的,内核在list.h中提供了下面的宏:

其中,list_first_entry 和 list_next_entry宏都定义在list.h中,分别代表:获取第一个真正的宿主结构的地址;获取下一个宿主结构的地址。它们的实现都是利用list_entry宏。

最终实现了宿主结构的遍历

首先pos定位到第一个宿主结构地址,然后循环获取下一个宿主结构地址,如果查到宿主结构中的member成员变量(宿主结构中struct list_head定义的字段)地址为head,则退出,从而实现了宿主结构的遍历。如果要循环对宿主结构中的其它成员变量进行操作,这个遍历操作就显得特别有意义了。

我们用上面的 nod结构举个例子:

实例1 一个简单的链表的实现

为方便起见,本例把内核的list.h文件单独拷贝出来,这样就可以独立于内核来编译测试。

功能描述:

本例比较简单,仅仅实现了单链表节点的创建、删除、遍历。

运行结果

实例2 如何在一个链表上管理不同类型的节点

功能描述:

本实例主要实现在同一个链表上管理两个不同类型的节点,实现增删改查的操作。

结构体定义

一个链表要想区分节点的不同类型,那么节点中必须要有信息能够区分该节点类型,为了方便节点扩展,我们参考Linux内核,定义一个统一类型的结构体:

其中成员type表示该节点的类型:

有了该结构体,我们要定义其他类型的结构体只需要包含该结构体即可,这个思想有点像面向对象语言的基类,后续派生出新的属性叫子类,说到这,一口君又忍不住想挖个坑,写一篇如何用C语言实现面向对象思想的继承、多态、interface。

下面我们定义2种类型的结构体:

i2c这种类型设备的专用结构体:

spi这种类型设备的专用结构体:

我特意让两个结构体大小类型不一致。

结构类型

链表头结点定义

根据之前我们讲解的思想,这个链表链接起来后,应该是以下这种结构:

节点的插入

我们定义的节点要插入链表仍然是要依赖list_add(),既然我们定义了struct device这个结构体,那么我们完全可以参考linux内核,针对不同的节点封装函数,要注册到这个链表只需要调用该函数即可。

实现如下:

设备i2c的注册函数如下:

设备spi的注册函数如下:

我们可以看到注册函数功能是填充了struct device 的type和name成员,然后再调用list_add()注册到链表中。这个思想很重要,因为Linux内核中许许多多的设备节点也是这样添加到其他的链表中的。要想让自己的C语言编程能力得到质的提升,一定要多读内核代码,即使看不懂也要坚持看,古人有云:代码读百遍其义自见。

节点的删除

同理,节点的删除,我们也统一封装成函数,同样只传递参数device即可:

在函数中,可以用container_of提取出了设备节点的首地址,实际使用中可以根据设备的不同释放不同的资源。

宿主结构的遍历

节点的遍历,在这里我们通过设备链表device_list开始遍历,假设该节点名是node,通过list_for_each()可以得到node->dev->list的地址,然后利用container_of 可以得到node->dev、node的地址。

由以上代码可知,利用内核链表的统一接口,找个每一个节点的list成员,然后再利用container_of 得到我们定义的标准结构体struct device,进而解析出节点的类型,调用对应节点显示函数,这个地方其实还可以优化,就是我们可以在struct device中添加一个函数指针,在xxx_unregister_device()函数中可以将该函数指针直接注册进来,那么此处代码会更精简高效一些。如果在做项目的过程中,写出这种面向对象思想的代码,那么你的地址是肯定不一样的。读者有兴趣可以自己尝试一下。

上述代码提取出来宿主节点的信息。

实例代码

代码主要功能:

117-118 :定义两个不同类型的节点dev1,dev2;

120 :初始化设备链表;

121-122、124:初始化节点数据;

123/125 :向链表device_list注册这两个节点;

126 :显示该链表;

127 :删除节点dev1;

128 :显示该链表。

程序运行截图

读者可以试试如何管理更多类型的节点。

实例3 实现节点在两个链表上自由移动

功能描述:

初始化两个链表,实现两个链表上节点的插入和移动。每个节点维护大量的临时内存数据。

节点创建

节点结构体创建如下:

需要注意成员pmem,因为要维护大量的内存,我们最好不要直定义个很大的数组,因为定义的变量位于栈中,而一般的系统给栈的空间是有限的,如果定义的变量占用空间太大,会导致栈溢出,一口君曾经就遇到过这个bug。

链表定义和初始化

链表定义如下:

初始化

这两个链表如下:

关于节点,因为该实例是从实际项目中剥离出来,节点启示是起到一个缓冲去的作用,数量不是无限的,所以在此我们默认最多10个节点。

我们不再动态创建节点,而是先全局创建指针数组,存放这10个节点的地址,然后将这10个节点插入到对应的队列中。

数组定义:

这个数组只用于存放指针,所以定义之后实际情况如下:

初始化这个数组对应的节点:

5:为下标为i的节点分配实际大小为sizeof(structmylist)的内存

6:初始化该节点的链表

7:为pmem成员从堆中分配一块内存

初始化完毕,链表实际情况如下:

节点插入

8:用头插法将所有节点插入到free_head链表中

所有节点全部插入free链表后,结构图如下:

遍历链表

虽然可以通过数组遍历链表,但是实际在操作过程中,在链表中各个节点的位置是错乱的。所以最好从借助list节点来查找各个节点。

show_list(&free_head);show_list(&active_head);

代码实现如下:

节点移动

将节点从active_head链表移动到free_head链表,有点像生产者消费者模型中的消费者,吃掉资源后,就要把这个节点放置到空闲链表,让生产者能够继续生产数据,所以这两个函数我起名eat、spit,意为吃掉和吐,希望你们不要觉得很怪异。

节点移动的思路是:

1. 利用list_empty判断该链表是否为空

2. 利用list_first_entry从active_head链表中查找到一个节点,并用指针entry指向该节点

3. 利用list_move_tail将该节点移入到free_head链表,注意此处不能用list_add,因为这个节点我要从原链表把他删除掉,然后插入到新链表。

将节点从free_head链表移动到active_head链表。

大部分功能讲解完了,下面我们贴下完整代码。

代码实例

运行结果如下:

list_head短小精悍,读者可以借鉴此文实现其他功能。

list.h比较长,需要回复:list。

参考文档:https://kernelnewbies.org/FAQ/LinkedLists

《Understanding linux kernel》

《Linux device drivers》

文章推荐

玩转内核链表list_head,教你管理不同类型节点的实现,建议收藏

2023-05-31 12:57:40

今日关注:iPhone二手格外火 保值又好用

2023-05-31 12:56:15

快看:《忍者必须死3》2023年5月31日礼包兑换码领取

2023-05-31 12:15:01

盐湖股份:按项目推进的计划,需要公开招标的项目已在公司官网进行公示公告

2023-05-31 12:19:25

2023年1至4月 天津海关签发“纸黄金”1.75万份 每日消息

2023-05-31 11:51:46

国家统计局:5月制造业采购经理指数(PMI)为48.8% 低于临界点

2023-05-31 11:10:03

歌唱家范竞马现在的妻子(歌唱家宋袓英现在干么) 环球速讯

2023-05-31 10:32:12

焦点热文:出租车司机没素质,辱骂乘客家人

2023-05-31 10:28:08

6月5日开始报名!安徽“特岗计划”招聘公告发布|视点

2023-05-31 10:01:07

对老师的评价和建议大学 对老师的评价和建议 环球热文

2023-05-31 09:31:13

2023“智汇·海淀”人才周开幕

2023-05-31 08:57:19

天天热推荐:天天动态:今日热讯:招聘丨北京市房山区卫生健康委员会所属事业单位公开招聘2023年应届毕业生(第二批)的公告

2023-05-31 08:28:55

焦点快播:人体最大的肌肉-股四头肌

2023-05-31 07:52:25

锂电池隔膜龙头恩捷股份下调定增额,新能源也不好融资了? 新要闻

2023-05-31 07:52:25

“夸父一号”观测到200多个太阳耀斑

2023-05-31 07:18:03

鬼如来佛像(鬼如来)|天天头条

2023-05-31 06:43:18

【播资讯】凯迪拉克CT6复活33英寸屏幕和新面孔

2023-05-31 05:54:30

焦点速读:冲刺60天!成都大运会龙泉驿赛区吹响全民动员“冲锋号”

2023-05-31 05:56:08

商用车板块5月30日涨0.25%,金龙汽车领涨,主力资金净流入38.36万元 环球视点

2023-05-31 04:54:41

西藏米林:持续发展生态旅游 珍稀牡丹花开引客来

2023-05-31 04:06:32

知名导演被曝舔美女的脚,努力吮吸30分钟,脚被舔成脱水的干梅-视焦点讯

2023-05-31 03:06:01

快播:璞泰来大手笔加码负极材料业务 锂电装备子公司获比亚迪、宁德新能源等联袂入股

2023-05-31 01:30:57

4月全国完成营业性客运量7.8亿人次

2023-05-31 01:11:18

每日热门:鹅蛋为什么是咸的?

2023-05-30 23:09:00

集美、同安公布小学招生方案

2023-05-30 23:03:46

值得买收关注函:需说明投建数字产业示范基地可行性、是否对公司流动性产生不利影响

2023-05-30 22:40:59

3连板新智认知(603869.SH):公司不涉及市场近期传闻脑机接口业务|天天资讯

2023-05-30 22:31:06

先睹为快!升级后的上海影城将带来这些顶级观影体验-当前通讯

2023-05-30 21:31:18

ESR5月30日回购45.00万股 耗资523.50万港币_全球微资讯

2023-05-30 21:19:01

高倍单式票霸气亮相,万元票目标一等奖!双色球23061期晒票欣赏

2023-05-30 20:56:56

数智互联,焕新未来——全新一代合力智能i系列全球首发上市! 焦点热讯

2023-05-30 20:25:34

延长文成杨梅供应期 科特派引育“早佳”新品

2023-05-30 20:27:17

影响太大!史上最严新规落地 5月仅2家私募成功备案!一批中小私募将出局-每日播报

2023-05-30 19:28:27

奉节警方破获特大电信网络诈骗团伙

2023-05-30 19:15:10

今日热搜:4399植物大战畺尸在线玩(4399植物大战僵尸)

2023-05-30 19:18:49

打卡中国·读懂中国式现代化(辽宁篇)|北方重工:奋力为国家创造更多“第一”_世界快播

2023-05-30 18:42:29

定投的“变”与“不变”

2023-05-30 18:25:50

双赢网平台登录入口下载_双赢网平台登录入口

2023-05-30 17:57:01

热点在线丨保时捷卡宴:狂野与优雅的完美结合

2023-05-30 17:55:52

新智认知3涨停-世界快看

2023-05-30 17:05:14

世界热推荐:怎么知道自己被录取了 中考录取通知书什么到

2023-05-30 17:19:55

环球通讯!【学习】重温习近平总书记对广大科技工作者的谆谆寄语

2023-05-30 16:42:48

广东中山企业组团进京“揽才”|世界快看点

2023-05-30 16:41:29

全球微速讯:中国男足世界杯预选赛赛程视频(中国男足世界杯预选赛)

2023-05-30 16:31:55

每日视讯:华住Q1同比扭亏净利润9.9亿元 对市场复苏谨慎乐观

2023-05-30 16:16:36

昆明五华区二季度23个项目集中开工 环球热讯

2023-05-30 15:35:34

泳池消毒片商品报价动态(2023-05-30)|当前焦点

2023-05-30 15:15:59

抓紧预约!成都这些地方免费开放!

2023-05-30 14:52:21

刷爆的“信用卡”——起底美国债务危机

2023-05-30 14:31:38

守望精神家园|最新快讯

2023-05-30 14:16:01

每日简讯:南阳镇平:全力以赴做好小麦抢收工作

2023-05-30 13:03:16

侯英超:世乒赛中国队表现完美 年轻运动员同样优秀

2023-05-30 13:05:04

经济日报:“以我为主”释放市场化改革效能

2023-05-30 11:31:46

天天微头条丨电子宠物小鸡过程_电子宠物 小鸡

2023-05-30 10:57:02

豫能控股:5月29日获融资买入684.91万元,占当日流入资金比例6.1%_世界速读

2023-05-30 10:17:12

一个人气场不强,不外乎四个原因

2023-05-30 09:23:53

当前播报:小金县今年将举行四姑娘山徒步露营大会和传统朝山会、川西藏歌会

2023-05-30 08:22:42

婴儿蒸鸡蛋羹正确做法?-天天观察

2023-05-30 07:44:27

捷信手机分期利率(捷信手机分期) 焦点日报

2023-05-30 07:00:18

国产大飞机实现蓝天梦 航空产业链书写高端制造新篇章|天天播资讯

2023-05-30 06:05:13

环球今日报丨深情败给时间原唱_深情败给时间的歌词

2023-05-30 05:22:40

陈奕迅请学生离场是怎么回事?为什么生气?

2023-05-30 04:31:00

浙商银行(02016.HK)完成发行2023年二级资本债券

2023-05-30 03:35:41

湖南两年召回缺陷消费品130多万件

2023-05-30 03:20:52

微资讯!信隆健康(002105.SZ):拟推400.11万股的2023年限制性股票激励计划

2023-05-30 02:24:32

【当前独家】【护航“三夏”】商水县迅速行动 打好防汛除涝主动战

2023-05-30 01:49:33

成都医学院收费怎么样好不好的是多少

2023-05-30 01:19:28

全球观热点:SeeCares宣布与Northmarq建立合作伙伴关系

2023-05-29 23:02:51

观天下!超性感?裸露部位一览无余,公共场所穿成这样,太惹眼吸引人!

2023-05-29 22:24:27

环球速递!完成奥运练兵任务 保持高位竞争态势——国乒教练组总结德班世乒赛

2023-05-29 21:51:24

乌克兰军方:基辅再遭俄罗斯袭击,此前已遇俄大规模无人机攻势

2023-05-29 20:58:02

月森莲在哪一集告白_月森莲 今日播报

2023-05-29 19:34:46

民众消费乏力 日本东京夜经济复苏遇阻 天天速递

2023-05-29 19:32:16

创新求质,江苏新高科分析仪器致力于成为行业可靠合作伙伴 世界动态

2023-05-29 19:25:46

美元周一走强 债务协议能否达成?

2023-05-29 18:51:11

天天播报:怎么去脸上螨虫的方法_怎么去脸上螨虫

2023-05-29 17:09:18

重庆2023年养老金每月会涨多少钱 2022~2023年重庆养老金上调方案细则最新消息

2023-05-29 16:08:18

天赐募投项目变更_当前动态

2023-05-29 16:04:21

快讯:华晨宇是不是富二代 他爸爸是做什么生意的具体情况详细内容介绍

2023-05-29 14:48:19

世界速看:首飞成功!中国大飞机 梦想照进现实

2023-05-29 14:00:53

峨眉山A:我公司没有代理运营环保车业务-天天快资讯

2023-05-29 13:21:28

qq记录查看器怎么下载_qq记录查看器

2023-05-29 12:24:42

SUPCASEUBP保护壳是市场上最好的保护壳之一

2023-05-29 11:36:51

天天看点:杭州上城区总工会举办新就业群体才艺大赛

2023-05-29 11:22:47

在线预约优化旅游体验:在家“动动手”,出游更省心

2023-05-29 10:44:04

航天员去往太空的“专车”细节满满!一起探秘长征二号F火箭

2023-05-29 09:54:35

携手共建中老友谊之桥 滇湘媒体中老铁路联合采访团走进老挝《人民报》_全球速看料

2023-05-29 08:43:36

起重机高清大图_起重机高楼爆破_焦点要闻

2023-05-29 08:03:34

当前视讯!猫咪为什么要花那么多时间梳理毛发?只是臭美吗?

2023-05-29 06:42:17

世界即时:专访日本无限合同会社首席经济师田代秀敏:美国才是真正的“经济胁迫者”

2023-05-29 06:14:35

windows10upgrade在哪里(windows10upgrade)

2023-05-29 04:28:55

德天空记者:拜仁需要向萨利支付600万到800万欧的赔偿金 环球百事通

2023-05-29 03:20:33

广州科技职业技术大学好不好?(广州科技职业技术大学好不好)-热文

2023-05-29 01:26:48

“小众”,不应成为某些品牌的保护色

2023-05-28 23:22:18

日落黄昏的唯美句子(日落黄昏的唯美句子100字)-热点评

2023-05-28 22:23:20

每日热点:越跌越买!股票ETF净流入490亿,“双创”类吸金超250亿

2023-05-28 20:57:33

做人与做事主要内容-做人与做事 今热点

2023-05-28 19:53:05

航天员去往太空的“专车”细节满满!一起探秘长征二号F火箭

2023-05-28 19:01:51

新修订的《保险资金投资的单一资产管理计划管理人评价规则》发布施行

2023-05-28 17:40:32

食品级片碱商品报价动态(2023-05-28)_环球视讯

2023-05-28 17:10:45

天天要闻:焦作市“政银”惠企暨降低公积金缴存企业融资成本签约仪式举行

2023-05-28 16:05:23

魔狼芬里斯_关于魔狼芬里斯简述

2023-05-28 14:45:01

校车着火了怎么办步骤_校车着火了如何解决|当前热议

2023-05-28 13:23:41

1-1,金球奖之争无悬念!梅西破C罗一神迹,52球神锋3冠王也白搭|播资讯

2023-05-28 12:14:53

知乎发布最新智能应用“搜索聚合”,面壁智能开源大模型CPM

2023-05-28 11:02:07

世界快看:逆水寒手游素问怎么救人[多图]

2023-05-28 10:19:01

盈利转为大幅亏损 海马汽车被质疑“洗大澡” 观天下

2023-05-28 09:26:04

水字的笔顺正确的写法_关于水字的简介

2023-05-28 08:02:58

环球简讯:五家渠高级中学官网 五家渠高级中学

2023-05-28 07:15:46

疯狂原始人国语迅雷_疯狂原始人下载迅雷下载

2023-05-28 05:50:59

金融理财师考试报名入口(金融理财师报名条件)

2023-05-28 04:21:33

雨前“虎口夺粮” 新华区抢抓农时忙夏收

2023-05-28 03:15:49

多特丢冠揪出2大罪人!球迷围攻官博:活该千年老二,明年降级吧 每日热点

2023-05-28 00:47:04

当大数据融入新生活 智慧生活从概念照进现实

2023-05-27 22:56:21

骁龙8Gen2旗舰跌至3019元,144Hz+80W,还是12GB+512GB

2023-05-27 22:02:27

央媒观豫丨河南持续推进南水北调后续工程高质量发展

2023-05-27 20:47:17

累的多音字_累的含义

2023-05-27 19:48:04

菜牙网开放注册_菜牙网_微资讯

2023-05-27 18:47:29

湖南郴州旅游景点大全排名表_湖南郴州旅游景点大全|全球热文

2023-05-27 18:01:52

星火成炬 | 永不止步 勇攀新高|天天最新

2023-05-27 16:45:07

夜收抢麦 和大雨“赛跑”!智慧农业“神器”助力增收抢农时|当前关注

2023-05-27 15:58:11

今日看点:定边县学庄乡贾崾先村扶贫互助资金协会

2023-05-27 14:49:14

天天观速讯丨家具是怎么样_恣在家的家具质量怎么样

2023-05-27 13:54:55

新资讯:曝索尼推迟公布了许多游戏 包括7月登pc的第一方作品

2023-05-27 12:55:50

中部河南持续麦熟 气象部门提醒适时抢收抢晒_世界短讯

2023-05-27 12:04:04

魔法的爱情_关于魔法的爱情简述

2023-05-27 10:48:58

五粮液董事长曾从钦:高端白酒特别是千元价格带市场供给仍偏紧|微速讯

2023-05-27 09:51:52

全球滚动:北京经开区专精特新“小巨人”企业达87家

2023-05-27 08:39:16

齐齐哈尔首个市级志愿服务主题广场即将落成

2023-05-27 08:40:19

武汉警官职业学院监狱学会(关于武汉警官职业学院监狱学会介绍)_世界今日讯

2023-05-27 07:55:27

公共场合,喝红酒别出洋相,记住3点,让你从“小白”变“专家” 天天头条

2023-05-27 06:52:41

企业偿债能力分析毕业论文_如何分析企业的盈利模式

2023-05-27 04:44:50

5月26日基金净值:景顺长城核心招景混合A最新净值0.6508,跌0.03%-环球观察

2023-05-27 03:43:07

报道:华兰疫苗:第三大股东河南高瓴骅盈拟减持不超2%公司股份

2023-05-27 03:04:45

值得歌词意思_值得歌词 天天视讯

2023-05-27 01:42:01

魔法气泡3_关于魔法气泡3简述

2023-05-27 00:55:28

环球快资讯:贵州全力创建“企业之家” 确保今年底全面完成

2023-05-27 00:16:31

速看:qq空间看不了是怎么回事(qq空间看不了)

2023-05-26 23:33:53

2023年全县妇幼健康项目培训班暨第一季度妇幼例会召开

2023-05-26 22:41:21

天天信息:莫雷托:贝林厄姆会加盟皇马,转会费1亿欧元加奖金

2023-05-26 21:44:57

大连万达商管澄清四大市场传闻|当前讯息

2023-05-26 21:44:21

中国太保集团总裁傅帆:未来将适当提高未上市股权及权益类资产的配置比例

2023-05-26 19:48:46

杭州光辉内饰改装,杭州汽车内饰翻新改装 每日观察

2023-05-26 19:27:13

朔州市推进恢河南邢家河村段治理工程

2023-05-26 18:35:45

世界聚焦:AI前哨|李彦宏谈大模型:提出问题比解决问题更重要

2023-05-26 18:01:28

全球百事通!试驾吉利睿蓝9:多快好省“奶爸车”,比理想L8更称职

2023-05-26 17:25:36

“贵国在伊拉克犯下多少罪行”非国大秘书长怒怼BBC记者|每日热文

2023-05-26 16:06:23

2022年中国单双面板PCB行业重点企业分析:金禄股份VS奥士康[图] 每日快播

2023-05-26 15:38:06

长缨在手缚苍龙的诗句_长缨在手缚苍龙

2023-05-26 15:24:09

爱克股份:融资净偿还119.43万元,融资余额2954.56万元(05-23)|世界热消息

2023-05-26 14:01:57

今日最新!被学生碰了一下,女老师竟回身猛踢还揪起孩子耳朵进教室!教育局:已解聘!

2023-05-26 13:14:22

ChatGPT热潮之下,AI能给家电业带来哪些颠覆?

2023-05-26 13:09:19

即将上线丨新御灵最新一手资料,提前预览!

2023-05-26 11:44:31

热消息:凯格精机:融资净买入69.25万元,融资余额5220.4万元(05-25)

2023-05-26 10:52:48

捷尼赛思“店大欺客”_今日热议

2023-05-26 10:08:59

与民心相连——公安英模讲述忠诚为民故事 世界实时

2023-05-26 09:15:37

导游三年工作计划(优选6篇)|全球速递

2023-05-26 08:25:44

宜昌荆州荆门恩施神农架 达成百万游客互送合作

2023-05-26 07:52:15

俄罗斯官员表示,周三凌晨,乌克兰在黑海试图用三艘载有爆炸物的无人快艇袭击“伊万·库尔斯号”军舰

2023-05-26 06:47:59

【聚焦2023数博会】青春遇见贵州,数字引领未来!青数聚·亚洲青年大数据创新创业论坛在贵阳举行

2023-05-26 05:55:39

游戏王城之内篇全卡预览-游戏王城之内篇汉化版全卡档

2023-05-26 04:59:10

东方一对情侣分手后起纠纷,涉及债务、名誉……

2023-05-26 04:02:02

白驹镇藕农采摘忙

2023-05-26 03:16:59

将于5月28日正式上市,凯迪拉克GT4官图发布

2023-05-26 02:13:33

三国之问鼎天下小说无弹窗_三国之问鼎天下

2023-05-26 01:21:49

睫毛怎么样才能变长(婴儿睫毛怎么样才能变长) 世界快看点

2023-05-26 01:14:10

环球要闻:福建清流:深入园区把脉问诊 助推建设无讼企业

2023-05-26 00:04:23

护航青少年心理健康 江苏南京和山东济南积极行动

2023-05-25 23:29:17

苏州游客满意度再拿全国第一!|天天热资讯

2023-05-25 22:51:12

环球视讯!服务万亿数字经济市场 普元信息产品矩阵全新升级

2023-05-25 21:24:23

全球最资讯丨曲美家居: 公司股票的价格受国家宏观经济政策、行业政策、市场的走势和基本面、行业景气度等因素的影响

2023-05-25 20:45:35

金雕现身湖北堵河源保护区

2023-05-25 20:06:35

网贷被骗打110有用吗?网贷还不上最坏结果是什么

2023-05-25 18:59:29

国际乒联第21周排名:樊振东积分锐减,第1位置或不保,莎莎三项第1-天天资讯

2023-05-25 18:22:17

小红书卖出一单收手续费吗?如何做好推广?

2023-05-25 17:48:51

环球快报:百度正内测基于大模型技术的“AI伙伴”、“AI BOT”以及NEW APP等产品

2023-05-25 17:22:41

世界资讯:北京卫视《我是大医生》颈肩腰腿自救指南来了!

2023-05-25 15:56:08

鹤岗到哈市的火车几点的

2023-05-25 15:18:36

午评:抛出一个灵魂拷问

2023-05-25 14:19:02

短讯!德班世乒赛:中国队男女单十人出战悉数晋级 混双会师四强

2023-05-25 13:33:50

怎么调出好吃的饸饹汤? 焦点热议

2023-05-25 13:09:05

第三届“时代旋律 家国情怀——环球影视文化传播高峰论坛”举办 环球微资讯

2023-05-25 12:32:27

盘活集体资产 反哺实体经济

2023-05-25 11:29:05

体验“黑科技” 感受美好生活新样态

2023-05-25 10:56:35

刘亦菲回京拍戏,戴千元渔夫帽现身机场,脸部肉滚滚圆到没下巴

2023-05-25 10:11:53

最新资讯:河南前“首富”与背后的金主“河南帮”

2023-05-25 09:50:18

世界今头条!《命运方舟》好感度是什么?怎么获取?

2023-05-25 08:31:42

三调耕地包括哪些地类(耕地是包括哪些地类)

2023-05-25 07:22:06

短讯!建设银行开户行怎么查询准确_建设银行开户行怎么查

2023-05-25 06:42:23

烧肉怎么做才能软烂而不油腻_如何做烧肉软烂而不油腻

2023-05-25 05:46:16

天天头条:暮虢朝虞(关于暮虢朝虞介绍)

2023-05-25 04:44:52

是什么促成了中国奇迹的发生_是什么促成了中国奇迹是什么催生了中国震撼

2023-05-25 03:36:01

天天视点!美联储基于海量推文创建新指标 能帮助预测加息幅度及次日股市回报率

2023-05-25 02:12:37

期货开盘时间日历(期货开盘时间)

2023-05-25 01:44:59

大湾区工程黄茅海通道项目整幅式TY型桥墩全部完工

2023-05-25 00:51:39

偃蹇什么意思_偃蹇

2023-05-24 23:42:42

山东黄金(600547.SH):控股子公司金舜矿业以8.66亿元竞得大桥金矿采矿权 快播报

2023-05-24 23:17:18

天天观察:LPG龙虎榜 | 主力合约减仓上行 多头退场意愿弱于空头

2023-05-24 22:46:31

甘州区城管执法局:草坪“理理发”干净又整洁

2023-05-24 21:51:11

兴和县气象台发布大风蓝色预警【IV级/一般】【2023-05-24】|前沿热点

2023-05-24 21:38:40