*参照元 [#c08a558f]
#backlinks

*説明 [#jb6f37a0]
-パス: [[linux-2.6.25/include/linux/sysfs.h]]

-属性(ATTRibutes)の実装を楽にするためのマクロである。
--属性の名前、モード、取得用の関数、設定用の関数、を指定する。

典型的な使い方(他の例は [[linux-2.6.25/include/linux/device.h]] を見よ)

 struct bus_attribute {
         struct attribute        attr;
         ssize_t (*show)(struct bus_type *bus, char *buf);
         ssize_t (*store)(struct bus_type *bus, const char *buf, size_t count);
 };
 
 #define BUS_ATTR(_name, _mode, _show, _store)   \
 struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)


**引数 [#fa3ca962]
-_name
--属性の名前を指定する。
マクロ内で文字列リテラルに変換されるため、二重引用符で囲う必要はない。
-_mode
--モードを指定する。
-_show
--取得用の関数ポインタを指定する。
-_store
--設定用の関数ポインタを指定する。

**返り値 [#g9a0325d]
-attr(attribute 構造体)と、show, store メンバを持つ構造体の値を生成して返す。
--変数宣言時に用いることが一般的であるが、
最近の C コンパイラであれば、拡張構文を用いた変数への
代入も可能だと思われる。
--[[linux-2.6.25/attribute]]

**参考 [#h2883245]


*実装 [#n54b11ee]
 #define __ATTR(_name,_mode,_show,_store) { \
         .attr = {.name = __stringify(_name), .mode = _mode },   \
         .show   = _show,                                        \
         .store  = _store,                                       \
 }
-_name を文字列化する以外は渡された値をそのまま使う。
--[[linux-2.6.25/__stringify()]]
--先述したとおり attr は struct attribute 型である。
---[[linux-2.6.25/attribute]]


*コメント [#fd429414]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS