2.1 static_assert 2.2 __same_type 2.3 (type *)0 2.4 offsetof 2.5 container_of 3、总结 Linux Version:6.6Author:DongeGithub:linux-api-insides 1、container_of函数介绍 container_of可以说是内核中使用最为频繁的一个函数了,简单来说,它的主要作用就是
_Static_assert:C11中引入的关键字,用于判断表达式expr并打印错误信息msg。 在container_of函数中,主要用来断言判断 static_assert( __same_type(*(ptr), ((type *)0)->member) || __same_type(*(ptr), void) , "pointer type mismatch in container_of()" ); 2.2 __same_type /* Are two types/...
*/#definecontainer_of(ptr,type,member)({\void*__mptr=(void*)(ptr);\static_assert(__same_type(*(ptr),((type*)0)->member)||\__same_type(*(ptr),void),\"pointer type mismatch in container_of()");\((type*)(__mptr-offsetof(type,member)));}) 函数名称:container_of 文件位置:inc...
1#include<iostream>2#include<string>3#include<unistd.h>4#include<pthread.h>5#include<assert.h>6using namespace std;7void*thread_routine(void*args)8{9string name=static_cast<constchar*>(args);//安全的进行强制类型转换10while(1)11{12cout<<"这是新线程, name:"<<name<<endl;13sleep(1);...
Assert...: 当前 Unit 运行必须满足的条件,否则会报启动失败 Service [Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。 [Service]# 服务的启动行为以及如何启动、重启、停止等信息 Type: 定义启动时的进程行为。它有以下几种值: ...
static const struct sysfs_ops *sysfs_file_ops(struct kernfs_node *kn){struct kobject *kobj = kn->parent->priv; if (kn->flags & KERNFS_LOCKDEP)lockdep_assert_held(kn);return kobj->ktype ? kobj->ktype->sysfs_ops : NULL;} 对此,张银奎笃定:“对于这样的内存溢出问题,这肯定不是第一现场...
gcc test.c -o mytest -I ./lib-static/include/ -L ./lib-static/lib/ -lmymath 使用动态库 1.第一种方法和静态库方法一样 拷贝头文件和库文件到系统路径下 2.我们先把动态库拷到当前路径下,然后使用我们使用静态库的第二种方法 cp ../lib-dyl/ . -rf gcc test.c -o mytest -I lib-dyl/in...
* These bits must not overlap. A static assert check should make sure of that. * Ifadding extra bits, make sure to decrease the bit index below as well. */#defineSPI_MODE_KERNEL_MASK (~(BIT(30) - 1))u32 mode;intirq;void*controller_state;void*controller_data;charmodalias[SPI_NAME_...
static void resched_task(struct task_struct *p){int cpu;assert_spin_locked(&task_rq(p)->lock);if (unlikely(test_tsk_thread_flag(p, TIF_NEED_RESCHED)))return;//设置被被抢占标记set_tsk_thread_flag(p, TIF_NEED_RESCHED);cpu = task_cpu(p);if (cpu == smp_processor_id())return;/* ...
static void show_thread_priority(pthread_attr_t *attr,int policy){int priority = sched_get_priority_max(policy);assert(priority != -1);printf("max_priority=%d\n",priority);priority= sched_get_priority_min(policy);assert(priority != -1);printf("min_priority=%d\n",priority);}static int...