首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏嵌入式ARM和Linux

    Linux内核10-list_head和hlist_head的理解

    : struct hlist_head { struct hlist_node *first; }; struct hlist_node { struct hlist_node *next 和hlist_node链表 拥有一个指针链表头的双向链表.它被分为struct hlist_head头节点和struct hlist_node 元素节点。 3.1 初始化 #define HLIST_HEAD_INIT { .first = NULL } #define HLIST_HEAD(name) struct hlist_head name = { hlist_add_head(struct hlist_node *n, struct hlist_head *h) { struct hlist_node *first = h->first (struct hlist_node *n) { struct hlist_node *next = n->next; struct hlist_node **pprev

    3.2K21编辑于 2022-08-10
  • 来自专栏高并发

    算法学习之哈希表实现

    { struct hlist_node **prev; //如果用双向链表组织哈希表可以使用,本程序是用单链表组织的 struct hlist_node *next; }; struct hlist_head { struct hlist_node *first; }; struct node { struct hlist_node hlist_node; char *key; char *value; }; struct hash_map { struct hlist_head *table *old_table = map->table; map->table = (struct hlist_head*)calloc(map->length,sizeof(struct hlist_head)); for(i = 0; i < old_cap; i++) { if(old_table[i].first !

    45820编辑于 2022-06-23
  • 来自专栏悟空被FFmpeg玩

    使用现成的Kernel里的list.h来写用户程序

    .  */ struct hlist_head {     struct hlist_node *first; }; struct hlist_node {     struct hlist_node h->first; } static inline void __hlist_del(struct hlist_node *n) {     struct hlist_node *next = n-> = pprev; } static inline void hlist_del(struct hlist_node *n) {     __hlist_del(n); } static inline void hlist_del_init(struct hlist_node *n) {     if (! hlist_add_head(struct hlist_node *n, struct hlist_head *h) {     struct hlist_node *first = h->first;

    1.1K10发布于 2019-03-05
  • 来自专栏技术之路

    .net core读取json文件中的数组和复杂数据

    首先放出来需要读取的jsoin文件内容,这次我们主要来说如何读取plist和hlist,前面的读取方法可以参照之前的文章,链接如下 .net Core 配置文件热加载 .Net Core读json文件 "uid": "sa", "pwd": "123456" }, "JAVA_HOME": "123", "plist": [ 11, 12, 13, 14, 15 ], "hlist { "server1name": "bbc", "server2port": "192.1678.11.15" } ] } 这里我将介绍四种方法读取plist与hlist , reloadOnChange: true) .Build(); var data1 = configuration["plist:3"]; var data2 = configuration["hlist [] hlist { get; set; } } public class Logindb { public string server

    2K10编辑于 2024-04-23
  • 来自专栏前端资源

    uni-app搜索历史记录功能实现

            list.unshift(_this.searchText);//将搜索关键词添加到数组开头         list.splice(6)//只保留6个         _this.hList  = list;         uni.setStorage({//将新的数组存入缓存           key: 'search_cache',           data: _this.hList         });         _this.search(_this.searchText);//搜索       },       fail() {//没有获取到缓存         _this.hList  = [];         _this.hList.push(_this.searchText);         uni.setStorage({           key: 'search_cache ',           data: _this.hList,         });         _this.search(_this.searchText);//搜索       }     }

    3.4K30发布于 2020-09-30
  • 来自专栏各类技术文章~

    python爬取B站《元龙》评论

    : try: s = json.loads(html) except: print("error") commentList = [] hlist = [] hlist.append("姓名") hlist.append("评论") for i in range(20): comment = s['data : try: s = json.loads(html) except: print("error") commentList = [] hlist = [] hlist.append("姓名") hlist.append("评论") for i in range(20): comment = s['data

    56640发布于 2021-09-15
  • 来自专栏全栈程序员必看

    RCU 机制_NRPS作用机制

    Linux 有两个双向链表的变种,循环链表 struct list_head 和线性链表 struct hlist_head/struct hlist_node。 将一个新元素添加到一个 RCU 保护的 hlist 里面与添加到循环链表里非常类似: 1 struct foo { 2 struct hlist_node *list; 3 int a; 4 int 订阅一个 RCU 保护的 hlist 也和循环链表非常接近。 () hlist_add_before_rcu() hlist_add_head_rcu() hlist_replace_rcu() hlist_del_rcu() hlist_for_each_entry_rcu () 注意,list_replace_rcu(), list_del_rcu(), hlist_replace_rcu(), 以及 hlist_del_rcu() 增加了一些复杂度。

    1.1K20编辑于 2022-11-15
  • 来自专栏嵌入式进阶之路

    通俗易懂!快速了解虚拟文件系统(VFS)

    const struct xattr_handler **s_xattr; struct list_head s_inodes; //把所有索引对象链接在一起,存放的是头结点 struct hlist_bl_head block_device *s_bdev; //相关的块设备 struct backing_dev_info *s_bdi; struct mtd_info *s_mtd; struct hlist_node struct mutex i_mutex; unsigned long dirtied_when; //首次修改时间 unsigned long dirtied_time_when; struct hlist_node i_lru; /* inode LRU list */ struct list_head i_sb_list; //链接一个文件系统中所有inode的链表 union { struct hlist_head unsigned int d_flags; /* protected by d_lock */ seqcount_t d_seq; /* per dentry seqlock */ struct hlist_bl_node

    4K22编辑于 2022-08-23
  • 来自专栏linux驱动个人学习

    Linux进程ID号--Linux进程的管理与调度(三)【转】

    struct pid_link pids; //... }; struct pid_link { struct hlist_node node; struct pid * pid; }; struct pid { struct hlist_head tasks; //指回 pid_link 的 node int nr; //PID struct hlist_node pid_chain; //pid hash 散列表结点 }; 每个进程的 task_struct 结构体中有一个指向 pid 结构体的指针,pid结构体包含了PID号。 node; struct pid *pid; }; struct pid { struct hlist_head tasks[PIDTYPE_MAX]; int nr; // PID struct hlist_node pid_chain; // pid hash 散列表结点 }; 上面 ID 的类型 PIDTYPE_MAX 表示 ID 类型数目。

    6.7K10发布于 2018-09-14
  • 来自专栏Linux内核那些事

    容器原理之 - namespace

    PIDTYPE_SID, PIDTYPE_MAX }; struct upid { int nr; struct pid_namespace *ns; struct hlist_node pid_chain; }; struct pid { atomic_t count; struct hlist_head tasks[PIDTYPE_MAX]; struct rcu_head rcu; unsigned int level; struct upid numbers[1]; }; struct pid_link { struct hlist_node >level; atomic_set(&pid->count, 1); for (type = 0; type < PIDTYPE_MAX; ++type) INIT_HLIST_HEAD *elem; struct upid *pnr; hlist_for_each_entry_rcu(pnr, elem, &pid_hash[pid_hashfn

    1.6K21发布于 2020-08-24
  • 来自专栏LINUX阅码场

    kprobe 和 kretprobe 隐藏的秘密

    很长一段时间跨越很多内核版本,多个 kretprobe instance 以 hlist node 的方式挂接在以 task地址 hash 为 key 的 hlist 上,而对 hlist node 的 因为函数调用返回前可能发生 task 迁移 后来,那些煤炭奈儿(maintainer,妹忒讷儿估计也发现了问题,提交了一些派驰(patch),将hlist 改成了 CAS-based lock-free

    91610编辑于 2023-08-21
  • 来自专栏linux驱动个人学习

    Kernel调试追踪技术之 Kprobe on ARM64

    /samples/kprobes/kretprobe_example.c 对外接口 struct kprobe { struct hlist_node hlist; // hash list保存所有 static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE]; struct kprobe *get_kprobe(void *addr) { )]; hlist_for_each_entry_rcu(p, head, hlist) { if (p->addr == addr) return p; INIT_HLIST_NODE(&p->hlist); hlist_add_head_rcu(&p->hlist, { /* 16 | 8 */ struct hlist_node *next; /* 24 | 8 */ struct hlist_node

    93711编辑于 2024-04-03
  • 来自专栏原创分享

    Linux 内核动态追踪技术的实现

    struct kprobe { // 用于插入哈希表,kprobe 子系统维护了一个哈希表 struct hlist_node hlist; // hack 同一个系统函数的钩子列表 p->ainsn.insn, kprobe_addr, sizeof(kprobe_opcode_t)); */ ret = prepare_kprobe(p); INIT_HLIST_NODE (&p->hlist); // 插入内核维护的哈希表 hlist_add_head_rcu(&p->hlist, &kprobe_table[hash_ptr

    1K22发布于 2021-11-19
  • 来自专栏总栏目

    线性表(链式存储结构)

    ; void CreateTable(HList *&h) { int i,j; DList *r,*s; h=(HList *)malloc(sizeof(HList)); //创建头结点 将结点s插入到结点r结点之后 r=s; //r始终指向最后一个数据结点 } r->next=NULL; //表尾结点next域置空 } void DispTable(HList *h1,HList *h2,HList *&h) { int f1,f2,i; DList *p=h1->next,*q,*s,*r; printf("连接字段是:第1个表位序,第2个表位序:" ); scanf("%d%d",&f1,&f2); h=(HList *)malloc(sizeof(HList)); h->Row=0; h->Col=h1->Col+h2->Col; h- /表2下移一个记录 } p=p->next; //表1下移一个记录 } r->next=NULL; //表尾结点next域置空 } int main() { HList

    97120编辑于 2022-09-05
  • 来自专栏蓝天

    Linux内核list/hlist解读

    Linux内核list&hlist解读.pdf 1.  4. hlist(hash list) 4.1. hlist(hash list)结构 4.1.1.  简述 hlist也是 一种双向链表,但不同于list_head,它的头部只有一个指针,常被用作哈希表的bucket数组,这样就可减少哈希bucket一半的内存消耗。 ? 4.1.2.  定义 struct hlist_head {         struct hlist_node *first;  }; struct hlist_node {         struct  hlist_node *next, **pprev; };

    1.6K10发布于 2018-08-10
  • 来自专栏C/C++基础

    Linux 命令(218)—— lnstat 命令

    out_slow_tot 11: out_slow_mc 12: gc_total 13: gc_ignored 14: gc_goal_miss 15: gc_dst_overflow 16: in_hlist_search 17: out_hlist_search (3)过滤出只想要查看的关键字段信息。

    47530编辑于 2022-12-18
  • 来自专栏Linux驱动

    linux内核里的字符串转换 ,链表操作常用函数(转)

    从当前点遍历链表并删除链表中相应的条目   list_for_each_entry_safe_reverse———反向遍历链表并删除链表中相应的条目   list_safe_reset_next———获得下一个指定类型的条目   hlist_for_each_entry ———遍历指定类型的单指针表头链表   hlist_for_each_entry_continue———从当前点继续遍历单指针表头链表   hlist_for_each_entry_from———从当前点继续遍历单指针表头链表   hlist_for_each_entry_safe———遍历指定类型的单指针表头链表并删除链表中相应的条目  2.字符串相关 内核中经常会有字符串转换的需要, 其接口如下: simple_strtoull

    2.7K20发布于 2018-12-28
  • 来自专栏存储内核技术交流

    ​聊聊内核虚拟文件系统

    int d_flags; /* protected by d_lock */ seqcount_spinlock_t d_seq; /* per dentry seqlock */ struct hlist_bl_node /* * d_alias and d_rcu can share memory */ union { // 用于将dentry连接到inode的i_dentry指针 struct hlist_node d_alias; // 哈哈西散列表 struct hlist_bl_node d_in_lookup_hash; } d_u; } __randomize_layout; vfs模块之间的关系是什么样的

    1.1K11编辑于 2022-08-17
  • 来自专栏原创分享

    从内核看SO_REUSEPORT的实现(基于5.9.9)

    static int udp_v4_get_port(struct sock *sk, unsigned short snum) { struct hlist_node *node; static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h) { // 头结点 struct hlist_node *first = h->first; n->next = first; if (first) first (&tb->owners); hlist_add_head(&tb->node, &head->chain); } return tb;} 我们继续看创建完后的逻辑。 hlist_empty(&tb->owners)) { if (inet_csk_bind_conflict(sk, tb, true, true)) goto

    1.8K21发布于 2021-07-08
  • 来自专栏指剑的分享

    Shell脚本个例

    /bin/sh HLIST=$( cat /root/ipaddrs ) for IP in $HLIST do ping -c 3 -i 0.2 -W 3 $IP &> /dev/null if [

    44120编辑于 2022-07-15
领券