Linux内核学习(一)

一、snprintf函数

1.功能及参数介绍

#include <stdio.h>

int snprintf(char *str, size_t size, char * format [, argument, …]);

功能:将可变参数 “…” 按照format的格式格式化为字符串,然后再将其拷贝至str中。

参数:

str           ----string with boundary。最终格式化字符串所存储的buff
size        ----boundary of the string。buff缓存区的长度,这里包括字符串结尾符‘\0’(注意:‘\0’是自动添加的,不管后面的自字符串是否包含’\0’),即可以输出到str的有效字符的大小为:size - 1
format    ----standard printf format。可变参数,类似于printf中的”%d”格式


返回值:当调用失败时返回值为负数,当调用成功时返回值为格式化后的字符串的总长度(不包括\0),这个字符串有可能被截断(因为有可能buf长度不够放下整个字符串)。

二、i2c_set_clientdata、i2c_get_clientdata

以i2c-hid为例,参考:I2C客户端驱动程序_i2c_get_clientdata-CSDN博客

1.i2c_set_clientdata(设置struct deivce结构中的私有数据)

struct i2c_hid{
        ...
};

static int i2c_hid_probe(struct i2c_client *client, const struct i2c_device_id *dev_id)
{
        ...
        struct i2c_hid *ihid;
        struct
        ...
        //将client->dev->driver_data 设置为ihid
        i2c_set_clientdata(client, ihid);
        ihid->client = client;
        ...
        hid->driver_data = client;

}
static inline void i2c_set_clientdata(struct i2c_client *dev, void *data)
{
        dev_set_drvdata(&dev->dev, data);
}


static inline void dev_set_drvdata(struct device *dev, void *data)
{
        dev->driver_data = data;
}

2.i2c_get_clientdata(获取私有数据)

static int i2c_hid_remove(struct i2c_client *client)
{
        //获取私有数据ihid
        struct i2c_hid *ihid = i2c_get_clientdata(client);
        ...
}
static inline void *i2c_get_clientdata(const struct i2c_client *dev)
{
        return dev_get_drvdata(&dev->dev);
}

static inline void *dev_get_drvdata(const struct device *dev)
{
        return dev->driver_data;
}

三、指针

1.野指针

三种情况:

(1)指针定义时未被初始化;

(2)指针被释放时没有置空;

(3)指针操作超过变量作用域。

参考:【精选】C/C++总结笔记——指针1:野指针、空指针(NULL和nullptr)、悬空指针、智能指针_空指针野指针悬空指针-CSDN博客2.分配内存

char *p; //没有给parr初始化为NULL,系统给它分配了个野地址
int len = 0;
...
len = snprintf(buf+len, "%s", tt);

常见错误

定义了指针变量,还没有指向任何变量,就开始使用。

四、memcpy函数

bug记录-memcpy 2023.03.02-CSDN博客

五、data[0]

C语言变长数组data[0]【总结】-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值