我有一些关于在Linux设备驱动程序中使用结构指针的基本问题。使用指针结构,而不是创建静态本地副本
以RTC ISL12022驱动器的linux /驱动器/ RTC/RTC-isl12022.c
struct isl12022 *isl12022 = i2c_get_clientdata(client); //From Function static int
isl12022_set_datetime(struct i2c_client *client, struct rtc_time *tm)
在上面的例子中结构的指针的一个例子是用来获取,而不是创建本地copyinto该函数的I2C客户端数据。大多数情况下,我在所有的司机都见过这种做法。因此,我期待了解使用结构指针而不是创建本地副本的优点吗?
-----------------------------------编辑---------- -------------------------------------
很好解释。谢谢。当将结构传递给需要使用的函数指针时,请同意。 但考虑到上述RTC-isl12022.c例如服用功能
isl12022_set_datetime(struct i2c_client *client, struct rtc_time *tm)
的i2c_client结构已经传递给函数作为指针。 (Thats there)
现在在isl12022_set_datetime函数中*客户端指针直接被用来代替创建它的本地副本,然后使用该副本来确保错误地指出由* client指向的原始结构是安全的并且没有改变。
struct isl12022 isl2022; and then copy the structure pointed as i2c_get_clientdata(client);
上面的语句将创建一个指向由i2c_get_clientdata FN返回isl12022结构isl12022结构的指针。不会是那个客户指出的原始数据结构的分布吗?
如果您复制了一个结构体,它通常与原始结构体无关(除非它包含指向其他数据的指针 - 浅拷贝与深拷贝) – knittl 2012-04-02 08:31:30