簡體   English   中英

在 __register_chrdev_region 中使用雙指針(類型 **)ptr(linux 內核,4.14.13,x86_64)

[英]the use of double pointer (type **)ptr in __register_chrdev_region (linux kernel, 4.14.13, x86_64)

在linux內核(4.14.13,x86_64)中,函數[__register_chrdev_region()][1]聲明了一個雙指針變量struct char_device_struct **cp; 然而,在整個函數中, cp的值從未被直接使用,它總是像這樣使用: *cp 我不明白這里的意思,為什么不定義一個像: struct char_device_struct *cp這樣的指針,然后使用像cp這樣的變量。 更清楚地說,例如,如果變量已定義為: struct char_device_struct *cp ,則該函數中的以下代碼段:

for (cp = &chrdevs[i]; *cp; cp = &(*cp)->next)
    if ((*cp)->major > major ||
       ((*cp)->major == major &&
       (((*cp)->baseminor >= baseminor) ||
       ((*cp)->baseminor + (*cp)->minorct > baseminor))))
            break;

可以這樣寫:

for (cp = chrdevs[i]; cp; cp = (*cp)->next)
    if ((cp)->major > major ||
       ((cp)->major == major &&
       (((cp)->baseminor >= baseminor) ||
       ((cp)->baseminor + (cp)->minorct > baseminor))))
            break;

所以我不知道為什么指針cp被定義為雙指針: struct char_device_struct **cp ,那么它總是被它的“取消引用”形式*cp [1]: https : //elixir.bootlin.com/linux/v4.14.13/source/fs/char_dev.c#L100

因為下面的幾行有一個對*cp的賦值:

cd->next = *cp;
*cp = cd;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM