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)
をRTC ISL12022ドライバのlinux /ドライバを例にとる構造体ポインタが代わりに機能COPYINTOローカル作成するI2Cクライアントデータを取得するために使用されます。 ほとんどすべてのドライバーでこのような練習を見ました。ここでは、ローカルコピーを作成する代わりに構造体ポインタを使用することの利点について知りたいと思っていますか?
----------------------------------- EDIT ---------- -------------------------------------
きちんと説明されています。ありがとう。関数ポインタに構造体を渡す必要がある場合は、それに同意してください。 しかしi2c_client構造は、既にポインタとして関数に渡される関数
isl12022_set_datetime(struct i2c_client *client, struct rtc_time *tm)
を取っRTC-isl12022.c上記の例を考慮。 (それはそこにある)
ここで、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