c?sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget /core-api/idrmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/zh_TW/core-api/idrmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/it_IT/core-api/idrmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/ja_JP/core-api/idrmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/ko_KR/core-api/idrmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/sp_SP/core-api/idrmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhM/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/core-api/idr.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(hDocumentation/core-api/idr.rst h]h)}(hDocumentation/core-api/idr.rsth]hDocumentation/core-api/idr.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h/周彬彬 Binbin Zhou h]h)}(h.周彬彬 Binbin Zhou h](h周彬彬 Binbin Zhou <}(hj hhhNhNubh reference)}(hzhoubinbin@loongson.cnh]hzhoubinbin@loongson.cn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:zhoubinbin@loongson.cnuh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhhhKubh)}(h}司延腾 Yanteng Si 吴想成 Wu Xiangcheng 时奎亮 Alex Shi h]h)}(h|司延腾 Yanteng Si 吴想成 Wu Xiangcheng 时奎亮 Alex Shi h](h司延腾 Yanteng Si <}(hjehhhNhNubj))}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1j(hjeubh> 吴想成 Wu Xiangcheng <}(hjehhhNhNubj))}(hbobwxc@email.cnh]hbobwxc@email.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:bobwxc@email.cnuh1j(hjeubh> 时奎亮 Alex Shi <}(hjehhhNhNubj))}(halexs@kernel.orgh]halexs@kernel.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:alexs@kernel.orguh1j(hjeubh>}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjaubah}(h]h ]h"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(hID分配h]hID分配}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hhh]h)}(hhh](h)}(h作者h]h作者}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhKubh)}(hMatthew Wilcox h]h)}(hMatthew Wilcoxh]hMatthew Wilcox}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj)}(hhh](j)}(h概述h]h概述}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hX要解决的一个常见问题是分配标识符(IDs);它通常是标识事物的数字。比如包括文件描述 符、进程ID、网络协议中的数据包标识符、SCSI标记和设备实例编号。IDR和IDA为这个问题 提供了一个合理的解决方案,以避免每个人都自创。IDR提供将ID映射到指针的能力,而IDA 仅提供ID分配,因此内存效率更高。h]hX要解决的一个常见问题是分配标识符(IDs);它通常是标识事物的数字。比如包括文件描述 符、进程ID、网络协议中的数据包标识符、SCSI标记和设备实例编号。IDR和IDA为这个问题 提供了一个合理的解决方案,以避免每个人都自创。IDR提供将ID映射到指针的能力,而IDA 仅提供ID分配,因此内存效率更高。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h3IDR接口已经被废弃,请使用 ``XArray`` 。h](h%IDR接口已经被废弃,请使用 }(hj-hhhNhNubhliteral)}(h ``XArray``h]hXArray}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j5hj-ubh 。}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id1ah ]h"]概述ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h IDR的用法h]h IDR的用法}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWhhhhhK"ubh)}(hz首先初始化一个IDR,对于静态分配的IDR使用DEFINE_IDR(),或者对于动态分配的IDR使用 idr_init()。h]hz首先初始化一个IDR,对于静态分配的IDR使用DEFINE_IDR(),或者对于动态分配的IDR使用 idr_init()。}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjWhhubh)}(h您可以调用idr_alloc()来分配一个未使用的ID。通过调用idr_find()查询与该ID相关的指针, 并通过调用idr_remove()释放该ID。h]h您可以调用idr_alloc()来分配一个未使用的ID。通过调用idr_find()查询与该ID相关的指针, 并通过调用idr_remove()释放该ID。}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjWhhubh)}(h如果需要更改与一个ID相关联的指针,可以调用idr_replace()。这样做的一个常见原因是通 过将 ``NULL`` 指针传递给分配函数来保留ID;用保留的ID初始化对象,最后将初始化的对 象插入IDR。h](hz如果需要更改与一个ID相关联的指针,可以调用idr_replace()。这样做的一个常见原因是通 过将 }(hjhhhNhNubj6)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubhr 指针传递给分配函数来保留ID;用保留的ID初始化对象,最后将初始化的对 象插入IDR。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK*hjWhhubh)}(h一些用户需要分配大于 ``INT_MAX`` 的ID。到目前为止,所有这些用户都满足 ``UINT_MAX`` 的限制,他们使用idr_alloc_u32()。如果您需要超出u32的ID,我们将与您合作以满足您的 需求。h](h一些用户需要分配大于 }(hjhhhNhNubj6)}(h ``INT_MAX``h]hINT_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubh7 的ID。到目前为止,所有这些用户都满足 }(hjhhhNhNubj6)}(h ``UINT_MAX``h]hUINT_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j5hjubhy 的限制,他们使用idr_alloc_u32()。如果您需要超出u32的ID,我们将与您合作以满足您的 需求。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK.hjWhhubh)}(h如果需要按顺序分配ID,可以使用idr_alloc_cyclic()。处理较大数量的ID时,IDR的效率会 降低,所以使用这个函数会有一点代价。h]h如果需要按顺序分配ID,可以使用idr_alloc_cyclic()。处理较大数量的ID时,IDR的效率会 降低,所以使用这个函数会有一点代价。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjWhhubh)}(hX要对IDR使用的所有指针进行操作,您可以使用基于回调的idr_for_each()或迭代器样式的 idr_for_each_entry()。您可能需要使用idr_for_each_entry_continue()来继续迭代。如果 迭代器不符合您的需求,您也可以使用idr_get_next()。h]hX要对IDR使用的所有指针进行操作,您可以使用基于回调的idr_for_each()或迭代器样式的 idr_for_each_entry()。您可能需要使用idr_for_each_entry_continue()来继续迭代。如果 迭代器不符合您的需求,您也可以使用idr_get_next()。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjWhhubh)}(h当使用完IDR后,您可以调用idr_destroy()来释放IDR占用的内存。这并不会释放IDR指向的 对象;如果您想这样做,请使用其中一个迭代器来执行此操作。h]h当使用完IDR后,您可以调用idr_destroy()来释放IDR占用的内存。这并不会释放IDR指向的 对象;如果您想这样做,请使用其中一个迭代器来执行此操作。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjWhhubh)}(hF您可以使用idr_is_empty()来查看当前是否分配了任何ID。h]hF您可以使用idr_is_empty()来查看当前是否分配了任何ID。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjWhhubh)}(hSIDR同步的相关内容请见include/linux/idr.h文件中的“DOC: idr sync”。h]hSIDR同步的相关内容请见include/linux/idr.h文件中的“DOC: idr sync”。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjWhhubeh}(h]idrah ]h"] idr的用法ah$]h&]uh1jhjhhhhhK"ubj)}(hhh](j)}(h IDA的用法h]h IDA的用法}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2hhhhhKEubh)}(hSIDA的用法的相关内容请见lib/idr.c文件中的“DOC: IDA description”。h]hSIDA的用法的相关内容请见lib/idr.c文件中的“DOC: IDA description”。}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhj2hhubeh}(h]idaah ]h"] ida的用法ah$]h&]uh1jhjhhhhhKEubj)}(hhh](j)}(h函数和数据结构h]h函数和数据结构}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYhhhhhKJubh)}(h该API在以下内核代码中:h]h该API在以下内核代码中:}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjYhhubh)}(hinclude/linux/idr.hh]hinclude/linux/idr.h}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhjYhhubh)}(h lib/idr.ch]h lib/idr.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjYhhubeh}(h]id2ah ]h"]函数和数据结构ah$]h&]uh1jhjhhhhhKJubeh}(h]idah ]h"]id分配ah$]h&]uh1jhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjTjQj/j,jVjSjju nametypes}(jjTj/jVjuh}(jjjQjj,jWjSj2jjYu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages] transformerN include_log]1Documentation/translations/zh_CN/core-api/idr.rst(NNNNta decorationNhhub.