<p >Use <a class="el" href="group__group__groups.html#gad34c82ead174988d418f3dcb003aaca7">cgroup_new_cgroup()</a> to create a dummy group and <a class="el" href="group__group__groups.html#ga53b9e13e30660c805ab5773d69397a43">cgroup_set_uid_gid()</a> and <a class="el" href="group__group__groups.html#gaa0400f1ff2fba7fbb6db82d97039d92b">cgroup_set_permissions()</a> to set its permissions. Use NO_UID_GID instead of GID/UID and NO_PERMS instead of file/directory permissions to let kernel decide the default permissions where you don't want specific user and/or permissions. Kernel then uses current user/group and permissions from umask then.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">new_default</td><td>New default permissions from this group are copied to libcgroup internal structures. I.e., this group can be freed immediatelly after this function returns. </td></tr>
+ <tr><td class="paramname">new_default</td><td>New default permissions from this group are copied to libcgroup internal structures. I.e., this group can be freed immediately after this function returns. </td></tr>
</table>
</dd>
</dl>
</tr>
</table>
</div><div class="memdoc">
-<p >Copy all controllers, their parameters and values. Group name, permissions and ownerships are not coppied. All existing controllers in the source group are discarded.</p>
+<p >Copy all controllers, their parameters and values. Group name, permissions and ownerships are not copied. All existing controllers in the source group are discarded.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">dst</td><td>Destination group. </td></tr>
<p >Physically create new control group in kernel, with all parameters and values copied from its parent group. The group is created in all hierarchies, where the parent group exists. I.e. following code creates subgroup in all hierarchies, because all of them have root (=parent) group. </p><div class="fragment"><div class="line"><span class="keyword">struct </span><a class="code hl_struct" href="structcgroup.html">cgroup</a> *foo = <a class="code hl_function" href="group__group__groups.html#gad34c82ead174988d418f3dcb003aaca7">cgroup_new_cgroup</a>(<span class="stringliteral">"foo"</span>);</div>
<div class="line"><a class="code hl_function" href="group__group__groups.html#ga90e1ce96f3cb540f7e82d076dd938f62">cgroup_create_cgroup_from_parent</a>(foo, 0);</div>
<div class="ttc" id="agroup__group__groups_html_ga90e1ce96f3cb540f7e82d076dd938f62"><div class="ttname"><a href="group__group__groups.html#ga90e1ce96f3cb540f7e82d076dd938f62">cgroup_create_cgroup_from_parent</a></div><div class="ttdeci">int cgroup_create_cgroup_from_parent(struct cgroup *cgroup, int ignore_ownership)</div><div class="ttdef"><b>Definition:</b> api.c:3103</div></div>
-</div><!-- fragment --> <dl class="todo"><dt><b><a class="el" href="todo.html#_todo000006">Todo:</a></b></dt><dd>what is this good for? Why the list of controllers added by <a class="el" href="group__group__groups.html#ga3929afd6ced9fe877613286b5f06cf8d">cgroup_add_controller()</a> is not used, like in <a class="el" href="group__group__groups.html#gadb8e13df6064841d3c9707960f782fa7">cgroup_create_cgroup()</a>? I can't crate subgroup of root group in just one hierarchy with this function!</dd></dl>
+</div><!-- fragment --> <dl class="todo"><dt><b><a class="el" href="todo.html#_todo000006">Todo:</a></b></dt><dd>what is this good for? Why the list of controllers added by <a class="el" href="group__group__groups.html#ga3929afd6ced9fe877613286b5f06cf8d">cgroup_add_controller()</a> is not used, like in <a class="el" href="group__group__groups.html#gadb8e13df6064841d3c9707960f782fa7">cgroup_create_cgroup()</a>? I can't create subgroup of root group in just one hierarchy with this function!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cgroup</td><td>The cgroup to create. Only it's name is used, everything else is discarded. </td></tr>
<tr class="separator:gad348f041e283860cbf6bcea567e23a21"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader">Read group stats</h2></td></tr>
-<tr><td class="ititle" colspan="2"><p >libcgroup's <a class="el" href="group__group__groups.html#gafaa51e5ffe09f8ad05585a1d3b6f7fa9">cgroup_get_value_string()</a> reads only relatively short parametrs of a group. Use following functions to read <code>stats</code> parameter, which can be quite long. </p>
+<tr><td class="ititle" colspan="2"><p >libcgroup's <a class="el" href="group__group__groups.html#gafaa51e5ffe09f8ad05585a1d3b6f7fa9">cgroup_get_value_string()</a> reads only relatively short parameters of a group. Use following functions to read <code>stats</code> parameter, which can be quite long. </p>
</td></tr>
<tr class="memitem:ga1138e47f124f0f634586db5e0c4ae5de"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__iterators.html#ga1138e47f124f0f634586db5e0c4ae5de">cgroup_read_stats_begin</a> (const char *controller, const char *path, void **handle, struct <a class="el" href="structcgroup__stat.html">cgroup_stat</a> *stat)</td></tr>
<tr class="separator:ga1138e47f124f0f634586db5e0c4ae5de"><td class="memSeparator" colspan="2"> </td></tr>
<li><p class="startli"><code>void <em>iterator_name</em>_end(void **handle)</code></p><ul>
<li>Free any data associated with the iterator. This function must be called even when <code><em>iterator_name</em>_begin()</code> fails.</li>
</ul>
-<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000011">Todo:</a></b></dt><dd>not all iterators follow this pattern, e.g. <a class="el" href="group__group__iterators.html#ga7b19f10c06abb96d8c8ae88a04888a68">cgroup_walk_tree_begin()</a> can result both in a state that <a class="el" href="group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde">cgroup_walk_tree_end()</a> is not needed and will sigsegv and in a state that <a class="el" href="group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde">cgroup_walk_tree_end()</a> is needed to free allocated memory. Complete review is needed! </dd></dl>
+<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000011">Todo:</a></b></dt><dd>not all iterators follow this pattern, e.g. <a class="el" href="group__group__iterators.html#ga7b19f10c06abb96d8c8ae88a04888a68">cgroup_walk_tree_begin()</a> can result both in a state that <a class="el" href="group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde">cgroup_walk_tree_end()</a> is not needed and will SIGSEGV and in a state that <a class="el" href="group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde">cgroup_walk_tree_end()</a> is needed to free allocated memory. Complete review is needed! </dd></dl>
<dl class="section user"><dt>Example of iterator usage:</dt><dd><div class="fragment"><div class="line"><span class="keywordtype">void</span> *handle; <span class="comment">// our iterator handle</span></div>
<div class="line">my_type item; <span class="comment">// the data returned by the iterator</span></div>
<div class="line"><span class="keywordtype">int</span> ret;</div>
<tr><td class="paramname">name</td><td>is variable name. </td></tr>
<tr><td class="paramname">handle</td><td>The handle to be used during iteration. </td></tr>
<tr><td class="paramname">buffer</td><td>The buffer to read the value into. The buffer is always zero-terminated. </td></tr>
- <tr><td class="paramname">max</td><td>Maximal lenght of the buffer </td></tr>
+ <tr><td class="paramname">max</td><td>Maximal length of the buffer </td></tr>
</table>
</dd>
</dl>
<tr><td class="paramname">handle</td><td>The handle to be used during iteration. </td></tr>
<tr><td class="paramname">data</td><td>returned the string. </td></tr>
<tr><td class="paramname">buffer</td><td>The buffer to read the value into. The buffer is always zero-terminated. </td></tr>
- <tr><td class="paramname">max</td><td>Maximal lenght of the buffer </td></tr>
+ <tr><td class="paramname">max</td><td>Maximal length of the buffer </td></tr>
</table>
</dd>
</dl>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">/*</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment"> * Max number of mounted hierarchies. Event if one controller is mounted</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment"> * per hier, it can not exceed CG_CONTROLLER_MAX</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment"> * per hierarchy, it can not exceed CG_CONTROLLER_MAX</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment"> */</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#define CG_HIER_MAX CG_CONTROLLER_MAX</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="comment">/* Details of user under consideration for destination cgroup */</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">struct </span>passwd *pw;</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">/* Gid of the process */</span></div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">/* gid of the process */</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> gid_t gid;</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span>};</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
<dt>Global <a class="el" href="group__group__groups.html#gadb8e13df6064841d3c9707960f782fa7">cgroup_create_cgroup</a> (struct cgroup *cgroup, int ignore_ownership)</dt>
<dd><a class="anchor" id="_todo000005"></a>what is ignore_ownership good for? </dd>
<dt>Global <a class="el" href="group__group__groups.html#ga90e1ce96f3cb540f7e82d076dd938f62">cgroup_create_cgroup_from_parent</a> (struct cgroup *cgroup, int ignore_ownership)</dt>
-<dd><p class="startdd"><a class="anchor" id="_todo000006"></a>what is this good for? Why the list of controllers added by <a class="el" href="group__group__groups.html#ga3929afd6ced9fe877613286b5f06cf8d">cgroup_add_controller()</a> is not used, like in <a class="el" href="group__group__groups.html#gadb8e13df6064841d3c9707960f782fa7">cgroup_create_cgroup()</a>? I can't crate subgroup of root group in just one hierarchy with this function!</p>
+<dd><p class="startdd"><a class="anchor" id="_todo000006"></a>what is this good for? Why the list of controllers added by <a class="el" href="group__group__groups.html#ga3929afd6ced9fe877613286b5f06cf8d">cgroup_add_controller()</a> is not used, like in <a class="el" href="group__group__groups.html#gadb8e13df6064841d3c9707960f782fa7">cgroup_create_cgroup()</a>? I can't create subgroup of root group in just one hierarchy with this function!</p>
<p class="enddd"><a class="anchor" id="_todo000007"></a>what is ignore_ownership good for? </p>
</dd>
<dt>Global <a class="el" href="group__group__groups.html#ga1dca18434e5d6be30c28c556da94f565">cgroup_delete_cgroup</a> (struct cgroup *cgroup, int ignore_migration)</dt>
<dt>Global <a class="el" href="group__group__iterators.html#ga7b19f10c06abb96d8c8ae88a04888a68">cgroup_walk_tree_begin</a> (const char *controller, const char *base_path, int depth, void **handle, struct <a class="el" href="structcgroup__file__info.html">cgroup_file_info</a> *info, int *base_level)</dt>
<dd><a class="anchor" id="_todo000012"></a>why base_level is not hidden in **handle? </dd>
<dt>Module <a class="el" href="group__group__iterators.html">group_iterators</a> </dt>
-<dd><a class="anchor" id="_todo000011"></a>not all iterators follow this pattern, e.g. <a class="el" href="group__group__iterators.html#ga7b19f10c06abb96d8c8ae88a04888a68">cgroup_walk_tree_begin()</a> can result both in a state that <a class="el" href="group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde">cgroup_walk_tree_end()</a> is not needed and will sigsegv and in a state that <a class="el" href="group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde">cgroup_walk_tree_end()</a> is needed to free allocated memory. Complete review is needed! </dd>
+<dd><a class="anchor" id="_todo000011"></a>not all iterators follow this pattern, e.g. <a class="el" href="group__group__iterators.html#ga7b19f10c06abb96d8c8ae88a04888a68">cgroup_walk_tree_begin()</a> can result both in a state that <a class="el" href="group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde">cgroup_walk_tree_end()</a> is not needed and will SIGSEGV and in a state that <a class="el" href="group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde">cgroup_walk_tree_end()</a> is needed to free allocated memory. Complete review is needed! </dd>
</dl>
</div></div><!-- contents -->
</div><!-- PageDoc -->