summaryrefslogtreecommitdiffstats
path: root/develop/_h5_g__u_g.html
blob: 563972936a0f8040696bf726bf009488b3104c88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.10.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>HDF5: HDF5 Groups</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
  $(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="hdf5doxy.css" rel="stylesheet" type="text/css">
<!-- <link href="hdf5doxy.css" rel="stylesheet" type="text/css"/>
 -->
<script type="text/javascript" src="hdf5_navtree_hacks.js"></script>
</head>
<body>
<div style="background:#FFDDDD;font-size:120%;text-align:center;margin:0;padding:5px">Please, help us to better serve our user community by answering the following short survey:  <a href="https://www.hdfgroup.org/website-survey/">https://www.hdfgroup.org/website-survey/</a></div>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="HDFG-logo.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname"><a href="https://www.hdfgroup.org">HDF5</a>
   &#160;<span id="projectnumber">1.15.0.68e8c0e</span>
   </div>
   <div id="projectbrief">API Reference</div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <span id="MSearchSelect"                onmouseover="return searchBox.OnSearchSelectShow()"                onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.10.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('_h5_g__u_g.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>

<div><div class="header">
  <div class="headertitle"><div class="title">HDF5 Groups</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="sec_group"></a>
HDF5 Groups</h1>
<h2><a class="anchor" id="subsec_group_intro"></a>
Introduction</h2>
<p>As suggested by the name Hierarchical Data Format, an HDF5 file is hierarchically structured. The HDF5 group and link objects implement this hierarchy.</p>
<p>In the simple and most common case, the file structure is a tree structure; in the general case, the file structure may be a directed graph with a designated entry point. The tree structure is very similar to the file system structures employed on UNIX systems, directories and files, and on Apple and Microsoft Windows systems, folders and files. HDF5 groups are analogous to the directories and folders; HDF5 datasets are analogous to the files.</p>
<p>The one very important difference between the HDF5 file structure and the above-mentioned file system analogs is that HDF5 groups are linked as a directed graph, allowing circular references; the file systems are strictly hierarchical, allowing no circular references. The figures below illustrate the range of possibilities.</p>
<p>In the first figure below, the group structure is strictly hierarchical, identical to the file system analogs.</p>
<p>In the next two figures below, the structure takes advantage of the directed graph's allowance of circular references. In the second figure, GroupA is not only a member of the root group, /, but a member of GroupC. Since Group C is a member of Group B and Group B is a member of Group A, Dataset1 can be accessed by means of the circular reference /Group A/Group B/Group C/Group A/Dataset1. The third figure below illustrates an extreme case in which GroupB is a member of itself, enabling a reference to a member dataset such as /Group A/Group B/Group B/Group B/Dataset2.</p>
<table class="doxtable">
<tr>
<td><div class="image">
<img src="Groups_fig1.gif" alt=""/>
<div class="caption">
A file with a strictly hierarchical group structure</div></div>
   </td></tr>
</table>
<table class="doxtable">
<tr>
<td><div class="image">
<img src="Groups_fig2.gif" alt=""/>
<div class="caption">
A file with a circular reference</div></div>
   </td></tr>
</table>
<table class="doxtable">
<tr>
<td><div class="image">
<img src="Groups_fig3.gif" alt=""/>
<div class="caption">
A file with one group as a member of itself</div></div>
   </td></tr>
</table>
<p>As becomes apparent upon reflection, directed graph structures can become quite complex; caution is advised!</p>
<p>The balance of this chapter discusses the following topics: </p><ul>
<li>The HDF5 group object (or a group) and its structure in more detail </li>
<li>HDF5 link objects (or links) </li>
<li>The programming model for working with groups and links </li>
<li>HDF5 functions provided for working with groups, group members, and links </li>
<li>Retrieving information about objects in a group </li>
<li>Discovery of the structure of an HDF5 file and the contained objects </li>
<li>Examples of file structures</li>
</ul>
<h2><a class="anchor" id="subsec_group_descr"></a>
Description of the Group Object</h2>
<h3><a class="anchor" id="subsubsec_group_descr_object"></a>
The Group Object</h3>
<p>Abstractly, an HDF5 group contains zero or more objects and every object must be a member of at least one group. The root group, the sole exception, may not belong to any group.</p>
<table class="doxtable">
<tr>
<td><div class="image">
<img src="Groups_fig4.gif" alt=""/>
<div class="caption">
Abstract model of the HDF5 group object</div></div>
   </td></tr>
</table>
<p>Group membership is actually implemented via link objects. See the figure above. A link object is owned by a group and points to a named object. Each link has a name, and each link points to exactly one object. Each named object has at least one and possibly many links to it.</p>
<p>There are three classes of named objects: group, dataset, and committed datatype (formerly called named datatype). See the figure below. Each of these objects is the member of at least one group, which means there is at least one link to it.</p>
<table class="doxtable">
<tr>
<td><div class="image">
<img src="Groups_fig5.gif" alt=""/>
<div class="caption">
Classes of named objects</div></div>
   </td></tr>
</table>
<p>The primary operations on a group are to add and remove members and to discover member objects. These abstract operations, as listed in the figure below, are implemented in the <a class="el" href="group___h5_g.html">Groups (H5G)</a> APIs. For more information, </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="#subsec_group_function">Group Function Summaries</a>.</dd></dl>
<p>To add and delete members of a group, links from the group to existing objects in the file are created and deleted with the link and unlink operations. When a new named object is created, the HDF5 Library executes the link operation in the background immediately after creating the object (in other words, a new object is added as a member of the group in which it is created without further user intervention).</p>
<p>Given the name of an object, the get_object_info method retrieves a description of the object, including the number of references to it. The iterate method iterates through the members of the group, returning the name and type of each object.</p>
<table class="doxtable">
<tr>
<td><div class="image">
<img src="Groups_fig6.gif" alt=""/>
<div class="caption">
The group object</div></div>
   </td></tr>
</table>
<p>Every HDF5 file has a single root group, with the name /. The root group is identical to any other HDF5 group, except: </p><ul>
<li>The root group is automatically created when the HDF5 file is created (<a class="el" href="group___h5_f.html#gae64b51ee9ac0781bc4ccc599d98387f4" title="Creates an HDF5 file.">H5Fcreate</a>). </li>
<li>The root group has no parent, but by convention has a reference count of 1. </li>
<li>The root group cannot be deleted (in other words, unlinked)!</li>
</ul>
<h3><a class="anchor" id="subsubsec_group_descr_model"></a>
The Hierarchy of Data Objects</h3>
<p>An HDF5 file is organized as a rooted, directed graph using HDF5 group objects. The named data objects are the nodes of the graph, and the links are the directed arcs. Each arc of the graph has a name, with the special name / reserved for the root group. New objects are created and then inserted into the graph with a link operation that is automatically executed by the library; existing objects are inserted into the graph with a link operation explicitly called by the user, which creates a named link from a group to the object.</p>
<p>An object can be the target of more than one link.</p>
<p>The names on the links must be unique within each group, but there may be many links with the same name in different groups. These are unambiguous, because some ancestor must have a different name, or else they are the same object. The graph is navigated with path names, analogous to Unix file systems. For more information, </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="#subsubsec_group_descr_path">HDF5 Path Names</a>.</dd></dl>
<p>An object can be opened with a full path starting at the root group, or with a relative path and a starting point. That starting point is always a group, though it may be the current working group, another specified group, or the root group of the file. Note that all paths are relative to a single HDF5 file. In this sense, an HDF5 file is analogous to a single UNIX file system.</p>
<p>It is important to note that, just like the UNIX file system, HDF5 objects do not have names, the names are associated with paths. An object has an object identifier that is unique within the file, but a single object may have many names because there may be many paths to the same object. An object can be renamed, or moved to another group, by adding and deleting links. In this case, the object itself never moves. For that matter, membership in a group has no implication for the physical location of the stored object.</p>
<p>Deleting a link to an object does not necessarily delete the object. The object remains available as long as there is at least one link to it. After all links to an object are deleted, it can no longer be opened, and the storage may be reclaimed.</p>
<p>It is also important to realize that the linking mechanism can be used to construct very complex graphs of objects. For example, it is possible for an object to be shared between several groups and even to have more than one name in the same group. It is also possible for a group to be a member of itself, or to create other cycles in the graph, such as in the case where a child group is linked to one of its ancestors.</p>
<p>HDF5 also has soft links similar to UNIX soft links. A soft link is an object that has a name and a path name for the target object. The soft link can be followed to open the target of the link just like a regular or hard link. The differences are that the hard link cannot be created if the target object does not exist and it always points to the same object. A soft link can be created with any path name, whether or not the object exists; it may or may not, therefore, be possible to follow a soft link. Furthermore, a soft link's target object may be changed.</p>
<h3><a class="anchor" id="subsubsec_group_descr_path"></a>
HDF5 Path Names</h3>
<p>The structure of the HDF5 file constitutes the name space for the objects in the file. A path name is a string of components separated by slashes (/). Each component is the name of a hard or soft link which points to an object in the file. The slash not only separates the components, but indicates their hierarchical relationship; the component indicated by the link name following a slash is a always a member of the component indicated by the link name preceding that slash.</p>
<p>The first component in the path name may be any of the following: </p><ul>
<li>The special character dot (., a period), indicating the current group </li>
<li>The special character slash (/), indicating the root group </li>
<li>Any member of the current group</li>
</ul>
<p>Component link names may be any string of ASCII characters not containing a slash or a dot (/ and ., which are reserved as noted above). However, users are advised to avoid the use of punctuation and non-printing characters, as they may create problems for other software. The figure below provides a BNF grammar for HDF5 path names.</p>
<p><em>A BNF grammar for HDF5 path names</em> </p><div class="fragment"><div class="line">PathName ::= AbsolutePathName | RelativePathName</div>
<div class="line">Separator ::= <span class="stringliteral">&quot;/&quot;</span> [<span class="stringliteral">&quot;/&quot;</span>]*</div>
<div class="line">AbsolutePathName ::= Separator [ RelativePathName ]</div>
<div class="line">RelativePathName ::= Component [ Separator RelativePathName ]*</div>
<div class="line">Component ::= <span class="stringliteral">&quot;.&quot;</span> | Characters</div>
<div class="line">Characters ::= Character+ - { <span class="stringliteral">&quot;.&quot;</span> }</div>
<div class="line">Character ::= {c: c Î { { legal ASCII characters } - {<span class="charliteral">&#39;/&#39;</span>} }</div>
</div><!-- fragment --><p>An object can always be addressed by either a full or an absolute path name, starting at the root group, or by a relative path name, starting in a known location such as the current working group. As noted elsewhere, a given object may have multiple full and relative path names.</p>
<p>Consider, for example, the file illustrated in the figure below. Dataset1 can be identified by either of these absolute path names: <em>/GroupA/Dataset1</em></p>
<p><em>/GroupA/GroupB/GroupC/Dataset1</em></p>
<p>Since an HDF5 file is a directed graph structure, and is therefore not limited to a strict tree structure, and since this illustrated file includes the sort of circular reference that a directed graph enables, Dataset1 can also be identified by this absolute path name: <em>/GroupA/GroupB/GroupC/GroupA/Dataset1</em></p>
<p>Alternatively, if the current working location is GroupB, Dataset1 can be identified by either of these relative path names: <em>GroupC/Dataset1</em></p>
<p><em>GroupC/GroupA/Dataset1</em></p>
<p>Note that relative path names in HDF5 do not employ the ../ notation, the UNIX notation indicating a parent directory, to indicate a parent group.</p>
<table class="doxtable">
<tr>
<td><div class="image">
<img src="Groups_fig2.gif" alt=""/>
<div class="caption">
A file with a circular reference</div></div>
   </td></tr>
</table>
<h3><a class="anchor" id="subsubsec_group_descr_impl"></a>
Group Implementations in HDF5</h3>
<p>The original HDF5 group implementation provided a single indexed structure for link storage. A new group implementation, as of HDF5 Release 1.8.0, enables more efficient compact storage for very small groups, improved link indexing for large groups, and other advanced features. </p><ul>
<li>
The original indexed format remains the default. Links are stored in a B-tree in the group's local heap. </li>
<li>
Groups created in the new compact-or-indexed format, the implementation introduced with Release 1.8.0, can be tuned for performance, switching between the compact and indexed formats at thresholds set in the user application. <ul>
<li>
The compact format will conserve file space and processing overhead when working with small groups and is particularly valuable when a group contains no links. Links are stored as a list of messages in the group's header. </li>
<li>
The indexed format will yield improved performance when working with large groups. A large group may contain thousands to millions of members. Links are stored in a fractal heap and indexed with an improved B-tree. </li>
</ul>
</li>
<li>
The new implementation also enables the use of link names consisting of non-ASCII character sets (see <a class="el" href="group___a_c_p_l.html#gad4fa8e2d17236786f770cf17eef908cc" title="Sets the character encoding used to encode link and attribute names.">H5Pset_char_encoding</a>) and is required for all link types other than hard or soft links; the link types other than hard or soft links are external links and user-defined links <dl class="section see"><dt>See also</dt><dd><a class="el" href="group___h5_l.html">Links (H5L)</a> APIs. </dd></dl>
</li>
</ul>
<p>The original group structure and the newer structures are not directly interoperable. By default, a group will be created in the original indexed format. An existing group can be changed to a compact-or-indexed format if the need arises; there is no capability to change back. As stated above, once in the compact-or-indexed format, a group can switch between compact and indexed as needed.</p>
<p>Groups will be initially created in the compact-or-indexed format only when one or more of the following conditions is met: </p><ul>
<li>
<p class="startli">The low version bound value of the library version bounds property has been set to Release 1.8.0 or later in the file access property list (see <a class="el" href="group___f_a_p_l.html#gacbe1724e7f70cd17ed687417a1d2a910" title="Controls the range of library release versions used when creating objects in a file.">H5Pset_libver_bounds</a>). Currently, that would require an <a class="el" href="group___f_a_p_l.html#gacbe1724e7f70cd17ed687417a1d2a910" title="Controls the range of library release versions used when creating objects in a file.">H5Pset_libver_bounds</a> call with the low parameter set to <a class="el" href="_h5_fpublic_8h.html#a47d050173da48a2b85c730446f0771c0">H5F_LIBVER_LATEST</a>.</p>
<p class="endli">When this property is set for an HDF5 file, all objects in the file will be created using the latest available format; no effort will be made to create a file that can be read by older libraries. </p>
</li>
<li>
The creation order tracking property, <a class="el" href="_h5_ppublic_8h.html#aa52f444ce2ba8bc5a062612f195e899f">H5P_CRT_ORDER_TRACKED</a>, has been set in the group creation property list (see <a class="el" href="group___g_c_p_l.html#ga24817b5c9553df3872de57c20bf11512" title="Sets creation order tracking and indexing for links in a group.">H5Pset_link_creation_order</a>). </li>
</ul>
<p>An existing group, currently in the original indexed format, will be converted to the compact-or- indexed format upon the occurrence of any of the following events: </p><ul>
<li>
An external or user-defined link is inserted into the group. </li>
<li>
A link named with a string composed of non-ASCII characters is inserted into the group. </li>
</ul>
<p>The compact-or-indexed format offers performance improvements that will be most notable at the extremes (for example, in groups with zero members and in groups with tens of thousands of members). But measurable differences may sometimes appear at a threshold as low as eight group members. Since these performance thresholds and criteria differ from application to application, tunable settings are provided to govern the switch between the compact and indexed formats (see <a class="el" href="group___g_c_p_l.html#gab463ac9355728469eddfd973b4a5964f" title="Sets the parameters for conversion between compact and dense groups.">H5Pset_link_phase_change</a>). Optimal thresholds will depend on the application and the operating environment.</p>
<p>Future versions of HDF5 will retain the ability to create, read, write, and manipulate all groups stored in either the original indexed format or the compact-or-indexed format.</p>
<h2><a class="anchor" id="subsec_group_h5dump"></a>
Using h5dump</h2>
<p>You can use h5dump, the command-line utility distributed with HDF5, to examine a file for purposes either of determining where to create an object within an HDF5 file or to verify that you have created an object in the intended place.</p>
<p>In the case of the new group created later in this chapter, the following h5dump command will display the contents of FileA.h5: </p><div class="fragment"><div class="line">h5dump FileA.h5</div>
</div><!-- fragment --><p>For more information, </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="#subsubsec_group_program_create">Creating a Group</a>.</dd></dl>
<p>Assuming that the discussed objects, GroupA and GroupB are the only objects that exist in FileA.h5, the output will look something like the following: </p><div class="fragment"><div class="line">HDF5 <span class="stringliteral">&quot;FileA.h5&quot;</span> {</div>
<div class="line">GROUP <span class="stringliteral">&quot;/&quot;</span> {</div>
<div class="line">GROUP GroupA {</div>
<div class="line">GROUP GroupB {</div>
<div class="line">}</div>
<div class="line">}</div>
<div class="line">}</div>
<div class="line">}</div>
</div><!-- fragment --><p>h5dump is described on the “HDF5 Tools” page of the <a class="el" href="_r_m.html">HDF5 Reference Manual</a>.</p>
<p>The HDF5 DDL grammar is described in the <a class="el" href="_d_d_l_b_n_f110.html">DDL in BNF through HDF5 1.10</a>.</p>
<h2><a class="anchor" id="subsec_group_function"></a>
Group Function Summaries</h2>
<p>Functions that can be used with groups (<a class="el" href="group___h5_g.html">Groups (H5G)</a> functions) and property list functions that can used with groups (<a class="el" href="group___h5_p.html">Property Lists (H5P)</a> functions) are listed below. A number of group functions have been deprecated. Most of these have become link (<a class="el" href="group___h5_l.html">Links (H5L)</a>) or object (<a class="el" href="group___h5_o.html">Objects (H5O)</a>) functions. These replacement functions are also listed below.</p>
<table class="doxtable">
<caption>Group functions</caption>
<tr>
<th>Function </th><th>Purpose  </th></tr>
<tr>
<td><a class="el" href="group___h5_g.html#ga187cee27a9fc4f1a311eb19b0522c7b8">H5Gcreate</a> </td><td>Creates a new empty group and gives it a name. The C function is a macro: <dl class="section see"><dt>See also</dt><dd><a class="el" href="api-compat-macros.html">API Compatibility Macros</a>.  </dd></dl>
</td></tr>
<tr>
<td><a class="el" href="group___h5_g.html#gab52641f0736281faaaae4e3039bbb344" title="Creates a new empty group without linking it into the file structure.">H5Gcreate_anon</a> </td><td>Creates a new empty group without linking it into the file structure.  </td></tr>
<tr>
<td><a class="el" href="group___h5_g.html#ga3eca6807deff4f9e51fc5fe0befc2245">H5Gopen</a> </td><td>Opens an existing group for modification and returns a group identifier for that group. The C function is a macro: <dl class="section see"><dt>See also</dt><dd><a class="el" href="api-compat-macros.html">API Compatibility Macros</a>.  </dd></dl>
</td></tr>
<tr>
<td><a class="el" href="group___h5_g.html#ga8dbe20b390d2504f0bd3589ed8f4e221" title="Closes the specified group.">H5Gclose</a> </td><td>Closes the specified group.  </td></tr>
<tr>
<td><a class="el" href="group___h5_g.html#ga0b959a53cbffa48f5d68ce33b43b7ed8" title="Gets a group creation property list identifier.">H5Gget_create_plist</a> </td><td>Gets a group creation property list identifier.  </td></tr>
<tr>
<td><a class="el" href="group___h5_g.html#gad4be126ab7bbf2001435e8e70089f3d3" title="Retrieves information about a group.">H5Gget_info</a> </td><td>Retrieves information about a group. Use instead of H5Gget_num_objs.  </td></tr>
<tr>
<td><a class="el" href="group___h5_g.html#ga985f27ad1a164d99fa1f58c6de60ab00" title="Retrieves information about a group, according to the group&#39;s position within an index.">H5Gget_info_by_idx</a> </td><td>Retrieves information about a group according to the group's position within an index.  </td></tr>
<tr>
<td><a class="el" href="group___h5_g.html#gadedd0c73c98f2ada69305f2992c3300e" title="Retrieves information about a group by its name.">H5Gget_info_by_name</a> </td><td>Retrieves information about a group.  </td></tr>
</table>
<table class="doxtable">
<caption>Link and object functions</caption>
<tr>
<th>Function </th><th>Purpose  </th></tr>
<tr>
<td><a class="el" href="group___h5_l.html#ga69d50f7acdfd2f1dc7c4372397e63bd2" title="Creates a hard link to an object.">H5Lcreate_hard</a> </td><td>Creates a hard link to an object. Replaces H5Glink and H5Glink2.  </td></tr>
<tr>
<td><a class="el" href="group___h5_l.html#ga894444623b58ce1ac3bd35538245ac78" title="Creates a soft link.">H5Lcreate_soft</a> </td><td>Creates a soft link to an object. Replaces H5Glink and H5Glink2.  </td></tr>
<tr>
<td><a class="el" href="group___h5_l.html#ga15dfaeb9b1c0b3136533cb97ee45e683" title="Creates an external link, a soft link to an object in a different file.">H5Lcreate_external</a> </td><td>Creates a soft link to an object in a different file. Replaces H5Glink and H5Glink2.  </td></tr>
<tr>
<td><a class="el" href="group___h5_l.html#gadaf9732947c45cd4d2442e7f58873fc2" title="Creates a link of a user-defined type.">H5Lcreate_ud</a> </td><td>Creates a link of a user-defined type.   </td></tr>
<tr>
<td><a class="el" href="group___h5_l.html#ga8eaacc372afc314e44521dfc1f66dcf4" title="Returns the value of a link.">H5Lget_val</a> </td><td>Returns the value of a symbolic link. Replaces H5Gget_linkval.  </td></tr>
<tr>
<td><a class="el" href="group___t_r_a_v.html#ga55406698106930db68242987c11ba051">H5Literate</a> </td><td>Iterates through links in a group. Replaces H5Giterate. See also <a class="el" href="group___h5_o.html#ga5ce86255fcc34ceaf84a62551cd24233">H5Ovisit</a> and <a class="el" href="group___t_r_a_v.html#gac0558936502924d9e898d8b6e041ed69">H5Lvisit</a>.  </td></tr>
<tr>
<td><a class="el" href="group___t_r_a_v.html#ga655b002428e0176c2fa23a0315fbbcc2">H5Literate_by_name</a> </td><td>Iterates through links in a group.  </td></tr>
<tr>
<td><a class="el" href="group___t_r_a_v.html#gac0558936502924d9e898d8b6e041ed69">H5Lvisit</a> </td><td>Recursively visits all links starting from a specified group.  </td></tr>
<tr>
<td><a class="el" href="group___h5_o.html#ga5ce86255fcc34ceaf84a62551cd24233">H5Ovisit</a> </td><td>Recursively visits all objects accessible from a specified object.  </td></tr>
<tr>
<td><a class="el" href="group___h5_l.html#ga97279697f3010a6ad31dd7f4341eb698">H5Lget_info</a> </td><td>Returns information about a link. Replaces H5Gget_objinfo.  </td></tr>
<tr>
<td><a class="el" href="group___h5_o.html#gaf4f302a33faba9e1c2b5f64c62ca4ed5">H5Oget_info</a> </td><td>Retrieves the metadata for an object specified by an identifier. Replaces H5Gget_objinfo.  </td></tr>
<tr>
<td><a class="el" href="group___h5_l.html#ga453ea40c3bb85ec8120dd17deed2bd90" title="Retrieves name of the n-th link in a group, according to the order within a specified field or index.">H5Lget_name_by_idx</a> </td><td>Retrieves name of the nth link in a group, according to the order within a specified field or index. Replaces H5Gget_objname_by_idx.  </td></tr>
<tr>
<td><a class="el" href="group___h5_o.html#gafe764884e1530f86079288dd5895a7bd">H5Oget_info_by_idx</a> </td><td>Retrieves the metadata for an object, identifying the object by an index position. Replaces H5Gget_objtype_by_idx.  </td></tr>
<tr>
<td><a class="el" href="group___h5_o.html#ga16d8ac07f9244cfccb42b5f309ca6b3c">H5Oget_info_by_name</a> </td><td>Retrieves the metadata for an object, identifying the object by location and relative name.  </td></tr>
<tr>
<td><a class="el" href="group___h5_o.html#ga8b5cf8e916204e29616516046121f631" title="Sets comment for specified object.">H5Oset_comment</a> </td><td>Sets the comment for specified object. Replaces H5Gset_comment.  </td></tr>
<tr>
<td><a class="el" href="group___h5_o.html#gaa1511ce5e2fe01ce7ea58f2f851d694b" title="Retrieves comment for specified object.">H5Oget_comment</a> </td><td>Gets the comment for specified object. Replaces H5Gget_comment.  </td></tr>
<tr>
<td><a class="el" href="group___h5_l.html#ga5b4e7f59f5d4bdae94fd8ce6875295cf" title="Removes a link from a group.">H5Ldelete</a> </td><td>Removes a link from a group. Replaces H5Gunlink.  </td></tr>
<tr>
<td><a class="el" href="group___h5_l.html#ga0bbc7f9bf25c8aca9dd8433a325c8acb" title="Moves a link within an HDF5 file.">H5Lmove</a> </td><td>Renames a link within an HDF5 file. Replaces H5Gmove and H5Gmove2.  </td></tr>
</table>
<div></div><div>   <a class="anchor" id="table_gcpl_id"></a>
<table class="doxtable">
<caption>Group creation property list functions (H5P)</caption>
<tr>
<th>Function </th><th>Purpose  </th></tr>
<tr>
<td><a class="el" href="group___d_c_p_l.html#ga70f5346250698afc950532e9593c3988" title="Verifies that all required filters are available.">H5Pall_filters_avail</a> </td><td>Verifies that all required filters are available.  </td></tr>
<tr>
<td><a class="el" href="_h5version_8h.html#a7e070dfec9cb3a3aaf9c188a987e6a15">H5Pget_filter</a> </td><td>Returns information about a filter in a pipeline. The C function is a macro: <dl class="section see"><dt>See also</dt><dd><a class="el" href="api-compat-macros.html">API Compatibility Macros</a>.  </dd></dl>
</td></tr>
<tr>
<td><a class="el" href="_h5version_8h.html#ac7aa336e7b1b9033cea2448ba623951f">H5Pget_filter_by_id</a> </td><td>Returns information about the specified filter. The C function is a macro: <dl class="section see"><dt>See also</dt><dd><a class="el" href="api-compat-macros.html">API Compatibility Macros</a>.  </dd></dl>
</td></tr>
<tr>
<td><a class="el" href="group___o_c_p_l.html#gacbad1ca36a61246b439a25f28e7575fb" title="Returns the number of filters in the pipeline.">H5Pget_nfilters</a> </td><td>Returns the number of filters in the pipeline.  </td></tr>
<tr>
<td><a class="el" href="group___o_c_p_l.html#ga12a358b3725a889c1768bbd2b5f541d8" title="Modifies a filter in the filter pipeline.">H5Pmodify_filter</a> </td><td>Modifies a filter in the filter pipeline.  </td></tr>
<tr>
<td><a class="el" href="group___o_c_p_l.html#gabffbf6d013c090fa052ac4bafce8e532" title="Delete one or more filters in the filter pipeline.">H5Premove_filter</a> </td><td>Deletes one or more filters in the filter pipeline.  </td></tr>
<tr>
<td><a class="el" href="group___d_c_p_l.html#gaf1f569bfc54552bdb9317d2b63318a0d" title="Sets deflate (GNU gzip) compression method and compression level.">H5Pset_deflate</a> </td><td>Sets the deflate (GNU gzip) compression method and compression level.  </td></tr>
<tr>
<td><a class="el" href="group___o_c_p_l.html#ga191c567ee50b2063979cdef156a768c5" title="Adds a filter to the filter pipeline.">H5Pset_filter</a> </td><td>Adds a filter to the filter pipeline.  </td></tr>
<tr>
<td><a class="el" href="group___o_c_p_l.html#ga8bc81abfbd0393b0a46e121f817a3f81" title="Sets up use of the Fletcher32 checksum filter.">H5Pset_fletcher32</a> </td><td>Sets up use of the Fletcher32 checksum filter.  </td></tr>
<tr>
<td><a class="el" href="group___g_c_p_l.html#ga870728af2bf3c0b16edafd762a1c44d6" title="Specifies the anticipated maximum size of a local heap.">H5Pset_local_heap_size_hint</a>/<a class="el" href="group___g_c_p_l.html#ga49e14718767fa160248e3852c2abdd74" title="Retrieves the anticipated size of the local heap for original-style groups.">H5Pget_local_heap_size_hint</a> </td><td>Sets/gets the anticipated maximum size of a local heap.  </td></tr>
<tr>
<td><a class="el" href="group___g_c_p_l.html#gab463ac9355728469eddfd973b4a5964f" title="Sets the parameters for conversion between compact and dense groups.">H5Pset_link_phase_change</a> </td><td>Sets the parameters for conversion between compact and dense groups.  </td></tr>
<tr>
<td><a class="el" href="group___g_c_p_l.html#gacab66461dca6c2beafd624c2e4d9f94d" title="Queries the settings for conversion between compact and dense groups.">H5Pget_link_phase_change</a> </td><td>Queries the settings for conversion between compact and dense groups.  </td></tr>
<tr>
<td><a class="el" href="group___g_c_p_l.html#gaa8571642d45e73ab5a9ae71cf00501f9" title="Sets estimated number of links and length of link names in a group.">H5Pset_est_link_info</a> </td><td>Sets estimated number of links and length of link names in a group.  </td></tr>
<tr>
<td><a class="el" href="group___g_c_p_l.html#ga701867215546a345dea7b8e9cf7a1b61" title="Returns the estimated link count and average link name length in a group.">H5Pget_est_link_info</a> </td><td>Queries data required to estimate required local heap or object header size.  </td></tr>
<tr>
<td><a class="el" href="group___l_a_p_l.html#gaa46c63c196a0cf5cd94dede039c030f4" title="Sets maximum number of soft or user-defined link traversals.">H5Pset_nlinks</a> </td><td>Sets maximum number of soft or user-defined link traversals.  </td></tr>
<tr>
<td><a class="el" href="group___l_a_p_l.html#ga6bfa33fa9a77011cbdc06d0fbc907177" title="Retrieves the maximum number of link traversals.">H5Pget_nlinks</a> </td><td>Retrieves the maximum number of link traversals.  </td></tr>
<tr>
<td><a class="el" href="group___g_c_p_l.html#ga24817b5c9553df3872de57c20bf11512" title="Sets creation order tracking and indexing for links in a group.">H5Pset_link_creation_order</a> </td><td>Sets creation order tracking and indexing for links in a group.  </td></tr>
<tr>
<td><a class="el" href="group___g_c_p_l.html#gaa2c2f433c7e65f694e0444e7f0ed2d33" title="Queries whether link creation order is tracked and/or indexed in a group.">H5Pget_link_creation_order</a> </td><td>Queries whether link creation order is tracked and/or indexed in a group.  </td></tr>
<tr>
<td><a class="el" href="group___a_c_p_l.html#gad4fa8e2d17236786f770cf17eef908cc" title="Sets the character encoding used to encode link and attribute names.">H5Pset_char_encoding</a> </td><td>Sets the character encoding used to encode a string. Use to set ASCII or UTF-8 character encoding for object names.  </td></tr>
<tr>
<td><a class="el" href="group___a_c_p_l.html#ga9b35ef9add6463997330e9b4b606603d" title="Retrieves the character encoding used to create a link or attribute name.">H5Pget_char_encoding</a> </td><td>Retrieves the character encoding used to create a string.  </td></tr>
</table>
</div><div>   </div><table class="doxtable">
<caption>Other external link functions</caption>
<tr>
<th>Function </th><th>Purpose  </th></tr>
<tr>
<td><a class="el" href="group___f_a_p_l.html#gac21a815e9b133802df625c9f766ef325" title="Sets the number of files that can be held open in an external link open file cache.">H5Pset_elink_file_cache_size</a> </td><td>Sets the size of the external link open file cache from the specified file access property list.  </td></tr>
<tr>
<td><a class="el" href="group___f_a_p_l.html#ga4c9bcfff90f48bfefa2c25e551485923" title="Retrieves the size of the external link open file cache.">H5Pget_elink_file_cache_size</a> </td><td>Retrieves the size of the external link open file cache from the specified file access property list.  </td></tr>
<tr>
<td><a class="el" href="group___h5_f.html#gafcc153d8606829d4401e93305e5246d7" title="Clears the external link open file cache.">H5Fclear_elink_file_cache</a> </td><td>Clears the external link open file cache for a file.  </td></tr>
</table>
<h2><a class="anchor" id="subsec_group_program"></a>
Programming Model for Groups</h2>
<p>The programming model for working with groups is as follows: </p><ol>
<li>
Create a new group or open an existing one. </li>
<li>
Perform the desired operations on the group. <ul>
<li>
Create new objects in the group. </li>
<li>
Insert existing objects as group members. </li>
<li>
Delete existing members. </li>
<li>
Open and close member objects. </li>
<li>
Access information regarding member objects. </li>
<li>
Iterate across group members. </li>
<li>
Manipulate links.</li>
</ul>
</li>
<li>
Terminate access to the group (Close the group).</li>
</ol>
<h3><a class="anchor" id="subsubsec_group_program_create"></a>
Creating a Group</h3>
<p>To create a group, use <a class="el" href="group___h5_g.html#ga187cee27a9fc4f1a311eb19b0522c7b8">H5Gcreate</a>, specifying the location and the path of the new group. The location is the identifier of the file or the group in a file with respect to which the new group is to be identified. The path is a string that provides either an absolute path or a relative path to the new group. For more information, </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="#subsubsec_group_descr_path">HDF5 Path Names</a>.</dd></dl>
<p>A path that begins with a slash (/) is an absolute path indicating that it locates the new group from the root group of the HDF5 file. A path that begins with any other character is a relative path. When the location is a file, a relative path is a path from that file's root group; when the location is a group, a relative path is a path from that group.</p>
<p>The sample code in the example below creates three groups. The group Data is created in the root directory; two groups are then created in /Data, one with absolute path, the other with a relative path.</p>
<p><em>Creating three new groups</em> </p><div class="fragment"><div class="line"><a class="code hl_typedef" href="_h5_ipublic_8h.html#a0045db7ff9c22ad35db6ae91662e1943">hid_t</a> file;</div>
<div class="line">file = <a class="code hl_function" href="group___h5_f.html#gaa3f4f877b9bb591f3880423ed2bf44bc">H5Fopen</a>(....);</div>
<div class="line"> </div>
<div class="line">group = <a class="code hl_define" href="group___h5_g.html#ga187cee27a9fc4f1a311eb19b0522c7b8">H5Gcreate</a>(file, <span class="stringliteral">&quot;/Data&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line">group_new1 = <a class="code hl_define" href="group___h5_g.html#ga187cee27a9fc4f1a311eb19b0522c7b8">H5Gcreate</a>(file, <span class="stringliteral">&quot;/Data/Data_new1&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line">group_new2 = <a class="code hl_define" href="group___h5_g.html#ga187cee27a9fc4f1a311eb19b0522c7b8">H5Gcreate</a>(group, <span class="stringliteral">&quot;Data_new2&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="ttc" id="a_h5_ipublic_8h_html_a0045db7ff9c22ad35db6ae91662e1943"><div class="ttname"><a href="_h5_ipublic_8h.html#a0045db7ff9c22ad35db6ae91662e1943">hid_t</a></div><div class="ttdeci">int64_t hid_t</div><div class="ttdef"><b>Definition</b> H5Ipublic.h:60</div></div>
<div class="ttc" id="a_h5_ppublic_8h_html_afa85e97bfbf9bf1c58e39263846c568f"><div class="ttname"><a href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a></div><div class="ttdeci">#define H5P_DEFAULT</div><div class="ttdef"><b>Definition</b> H5Ppublic.h:102</div></div>
<div class="ttc" id="agroup___h5_f_html_gaa3f4f877b9bb591f3880423ed2bf44bc"><div class="ttname"><a href="group___h5_f.html#gaa3f4f877b9bb591f3880423ed2bf44bc">H5Fopen</a></div><div class="ttdeci">hid_t H5Fopen(const char *filename, unsigned flags, hid_t fapl_id)</div><div class="ttdoc">Opens an existing HDF5 file.</div></div>
<div class="ttc" id="agroup___h5_g_html_ga187cee27a9fc4f1a311eb19b0522c7b8"><div class="ttname"><a href="group___h5_g.html#ga187cee27a9fc4f1a311eb19b0522c7b8">H5Gcreate</a></div><div class="ttdeci">#define H5Gcreate</div><div class="ttdef"><b>Definition</b> H5version.h:997</div></div>
</div><!-- fragment --><p> The third <a class="el" href="group___h5_g.html#ga187cee27a9fc4f1a311eb19b0522c7b8">H5Gcreate</a> parameter optionally specifies how much file space to reserve to store the names that will appear in this group. If a non-positive value is supplied, a default size is chosen.</p>
<h3><a class="anchor" id="subsubsec_group_program_open"></a>
Opening a Group and Accessing an Object in that Group</h3>
<p>Though it is not always necessary, it is often useful to explicitly open a group when working with objects in that group. Using the file created in the example above, the example below illustrates the use of a previously-acquired file identifier and a path relative to that file to open the group Data.</p>
<p>Any object in a group can be also accessed by its absolute or relative path. To open an object using a relative path, an application must first open the group or file on which that relative path is based. To open an object using an absolute path, the application can use any location identifier in the same file as the target object; the file identifier is commonly used, but object identifier for any object in that file will work. Both of these approaches are illustrated in the example below.</p>
<p>Using the file created in the examples above, the example below provides sample code illustrating the use of both relative and absolute paths to access an HDF5 data object. The first sequence (two function calls) uses a previously-acquired file identifier to open the group Data, and then uses the returned group identifier and a relative path to open the dataset CData. The second approach (one function call) uses the same previously-acquired file identifier and an absolute path to open the same dataset.</p>
<p><em>Open a dataset with relative and absolute paths</em> </p><div class="fragment"><div class="line">group = <a class="code hl_define" href="group___h5_g.html#ga3eca6807deff4f9e51fc5fe0befc2245">H5Gopen</a>(file, <span class="stringliteral">&quot;Data&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line"> </div>
<div class="line">dataset1 = <a class="code hl_define" href="_h5version_8h.html#a7dba2e5b2045f31c0932123ffb54f7a3">H5Dopen</a>(group, <span class="stringliteral">&quot;CData&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line">dataset2 = <a class="code hl_define" href="_h5version_8h.html#a7dba2e5b2045f31c0932123ffb54f7a3">H5Dopen</a>(file, <span class="stringliteral">&quot;/Data/CData&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="ttc" id="a_h5version_8h_html_a7dba2e5b2045f31c0932123ffb54f7a3"><div class="ttname"><a href="_h5version_8h.html#a7dba2e5b2045f31c0932123ffb54f7a3">H5Dopen</a></div><div class="ttdeci">#define H5Dopen</div><div class="ttdef"><b>Definition</b> H5version.h:903</div></div>
<div class="ttc" id="agroup___h5_g_html_ga3eca6807deff4f9e51fc5fe0befc2245"><div class="ttname"><a href="group___h5_g.html#ga3eca6807deff4f9e51fc5fe0befc2245">H5Gopen</a></div><div class="ttdeci">#define H5Gopen</div><div class="ttdef"><b>Definition</b> H5version.h:1008</div></div>
</div><!-- fragment --><h3><a class="anchor" id="subsubsec_group_program_dataset"></a>
Creating a Dataset in a Specific Group</h3>
<p>Any dataset must be created in a particular group. As with groups, a dataset may be created in a particular group by specifying its absolute path or a relative path. The example below illustrates both approaches to creating a dataset in the group /Data.</p>
<p><em> Create a dataset with absolute and relative paths</em> </p><div class="fragment"><div class="line">dataspace = <a class="code hl_function" href="group___h5_s.html#ga8e35eea5738b4805856eac7d595254ae">H5Screate_simple</a>(RANK, dims, NULL);</div>
<div class="line">dataset1 = <a class="code hl_define" href="group___h5_d.html#ga0647ba4bbd26d5230cc07f3a5685b2cf">H5Dcreate</a>(file, <span class="stringliteral">&quot;/Data/CData&quot;</span>, <a class="code hl_define" href="group___p_d_t_n_a_t.html#ga3cf93ffc6782be68070ef8e00f219ec2">H5T_NATIVE_INT</a>, dataspace,</div>
<div class="line">                     <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line">group = <a class="code hl_define" href="group___h5_g.html#ga3eca6807deff4f9e51fc5fe0befc2245">H5Gopen</a>(file, <span class="stringliteral">&quot;Data&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line">dataset2 = <a class="code hl_define" href="group___h5_d.html#ga0647ba4bbd26d5230cc07f3a5685b2cf">H5Dcreate</a>(group, <span class="stringliteral">&quot;Cdata2&quot;</span>, <a class="code hl_define" href="group___p_d_t_n_a_t.html#ga3cf93ffc6782be68070ef8e00f219ec2">H5T_NATIVE_INT</a>, dataspace,</div>
<div class="line">                     <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="ttc" id="agroup___h5_d_html_ga0647ba4bbd26d5230cc07f3a5685b2cf"><div class="ttname"><a href="group___h5_d.html#ga0647ba4bbd26d5230cc07f3a5685b2cf">H5Dcreate</a></div><div class="ttdeci">#define H5Dcreate</div><div class="ttdef"><b>Definition</b> H5version.h:892</div></div>
<div class="ttc" id="agroup___h5_s_html_ga8e35eea5738b4805856eac7d595254ae"><div class="ttname"><a href="group___h5_s.html#ga8e35eea5738b4805856eac7d595254ae">H5Screate_simple</a></div><div class="ttdeci">hid_t H5Screate_simple(int rank, const hsize_t dims[], const hsize_t maxdims[])</div><div class="ttdoc">Creates a new simple dataspace and opens it for access.</div></div>
<div class="ttc" id="agroup___p_d_t_n_a_t_html_ga3cf93ffc6782be68070ef8e00f219ec2"><div class="ttname"><a href="group___p_d_t_n_a_t.html#ga3cf93ffc6782be68070ef8e00f219ec2">H5T_NATIVE_INT</a></div><div class="ttdeci">#define H5T_NATIVE_INT</div><div class="ttdef"><b>Definition</b> H5Tpublic.h:767</div></div>
</div><!-- fragment --><h3><a class="anchor" id="subsubsec_group_program_close"></a>
Closing a Group</h3>
<p>To ensure the integrity of HDF5 objects and to release system resources, an application should always call the appropriate close function when it is through working with an HDF5 object. In the case of groups, H5Gclose ends access to the group and releases any resources the HDF5 library has maintained in support of that access, including the group identifier.</p>
<p>As illustrated in the example below, all that is required for an H5Gclose call is the group identifier acquired when the group was opened; there are no relative versus absolute path considerations.</p>
<p><em>Close a group</em> </p><div class="fragment"><div class="line"><a class="code hl_typedef" href="_h5public_8h.html#a3b079ecf932a5c599499cf7e298af160">herr_t</a> status;</div>
<div class="line"> </div>
<div class="line">status = <a class="code hl_function" href="group___h5_g.html#ga8dbe20b390d2504f0bd3589ed8f4e221">H5Gclose</a>(group);</div>
<div class="ttc" id="a_h5public_8h_html_a3b079ecf932a5c599499cf7e298af160"><div class="ttname"><a href="_h5public_8h.html#a3b079ecf932a5c599499cf7e298af160">herr_t</a></div><div class="ttdeci">int herr_t</div><div class="ttdef"><b>Definition</b> H5public.h:235</div></div>
<div class="ttc" id="agroup___h5_g_html_ga8dbe20b390d2504f0bd3589ed8f4e221"><div class="ttname"><a href="group___h5_g.html#ga8dbe20b390d2504f0bd3589ed8f4e221">H5Gclose</a></div><div class="ttdeci">herr_t H5Gclose(hid_t group_id)</div><div class="ttdoc">Closes the specified group.</div></div>
</div><!-- fragment --><p>A non-negative return value indicates that the group was successfully closed and the resources released; a negative return value indicates that the attempt to close the group or release resources failed.</p>
<h3><a class="anchor" id="subsubsec_group_program_links"></a>
Creating Links</h3>
<p>As previously mentioned, every object is created in a specific group. Once created, an object can be made a member of additional groups by means of links created with one of the H5Lcreate_* functions.</p>
<p>A link is, in effect, a path by which the target object can be accessed; it therefore has a name which functions as a single path component. A link can be removed with an <a class="el" href="group___h5_l.html#ga5b4e7f59f5d4bdae94fd8ce6875295cf" title="Removes a link from a group.">H5Ldelete</a> call, effectively removing the target object from the group that contained the link (assuming, of course, that the removed link was the only link to the target object in the group).</p>
<h4>Hard Links</h4>
<p>There are two kinds of links, hard links and symbolic links. Hard links are reference counted; symbolic links are not. When an object is created, a hard link is automatically created. An object can be deleted from the file by removing all the hard links to it.</p>
<p>Working with the file from the previous examples, the code in the example below illustrates the creation of a hard link, named Data_link, in the root group, /, to the group Data. Once that link is created, the dataset Cdata can be accessed via either of two absolute paths, /Data/Cdata or /Data_Link/Cdata.</p>
<p><em>Create a hard link</em> </p><div class="fragment"><div class="line">status = <a class="code hl_function" href="group___h5_l.html#ga69d50f7acdfd2f1dc7c4372397e63bd2">H5Lcreate_hard</a>(Data_loc_id, <span class="stringliteral">&quot;Data&quot;</span>, DataLink_loc_id, <span class="stringliteral">&quot;Data_link&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line"> </div>
<div class="line">dataset1 = <a class="code hl_define" href="_h5version_8h.html#a7dba2e5b2045f31c0932123ffb54f7a3">H5Dopen</a>(file, <span class="stringliteral">&quot;/Data_link/CData&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line">dataset2 = <a class="code hl_define" href="_h5version_8h.html#a7dba2e5b2045f31c0932123ffb54f7a3">H5Dopen</a>(file, <span class="stringliteral">&quot;/Data/CData&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="ttc" id="agroup___h5_l_html_ga69d50f7acdfd2f1dc7c4372397e63bd2"><div class="ttname"><a href="group___h5_l.html#ga69d50f7acdfd2f1dc7c4372397e63bd2">H5Lcreate_hard</a></div><div class="ttdeci">herr_t H5Lcreate_hard(hid_t cur_loc, const char *cur_name, hid_t dst_loc, const char *dst_name, hid_t lcpl_id, hid_t lapl_id)</div><div class="ttdoc">Creates a hard link to an object.</div></div>
</div><!-- fragment --><p>The example below shows example code to delete a link, deleting the hard link Data from the root group. The group /Data and its members are still in the file, but they can no longer be accessed via a path using the component /Data.</p>
<p><em>Delete a link</em> </p><div class="fragment"><div class="line">status = <a class="code hl_function" href="group___h5_l.html#ga5b4e7f59f5d4bdae94fd8ce6875295cf">H5Ldelete</a>(Data_loc_id, <span class="stringliteral">&quot;Data&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line"> </div>
<div class="line">dataset1 = <a class="code hl_define" href="_h5version_8h.html#a7dba2e5b2045f31c0932123ffb54f7a3">H5Dopen</a>(file, <span class="stringliteral">&quot;/Data_link/CData&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line"><span class="comment">// This call should succeed; all path components still exist</span></div>
<div class="line">dataset2 = <a class="code hl_define" href="_h5version_8h.html#a7dba2e5b2045f31c0932123ffb54f7a3">H5Dopen</a>(file, <span class="stringliteral">&quot;/Data/CData&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line"><span class="comment">// This call will fail; the path component &#39;/Data&#39; has been deleted.</span></div>
<div class="ttc" id="agroup___h5_l_html_ga5b4e7f59f5d4bdae94fd8ce6875295cf"><div class="ttname"><a href="group___h5_l.html#ga5b4e7f59f5d4bdae94fd8ce6875295cf">H5Ldelete</a></div><div class="ttdeci">herr_t H5Ldelete(hid_t loc_id, const char *name, hid_t lapl_id)</div><div class="ttdoc">Removes a link from a group.</div></div>
</div><!-- fragment --><p>When the last hard link to an object is deleted, the object is no longer accessible. <a class="el" href="group___h5_l.html#ga5b4e7f59f5d4bdae94fd8ce6875295cf" title="Removes a link from a group.">H5Ldelete</a> will not prevent you from deleting the last link to an object. To see if an object has only one link, use the <a class="el" href="group___h5_o.html#gaf4f302a33faba9e1c2b5f64c62ca4ed5">H5Oget_info</a> function. If the value of the rc (reference count) field in the is greater than 1, then the link can be deleted without making the object inaccessible.</p>
<p>The example below shows <a class="el" href="group___h5_o.html#gaf4f302a33faba9e1c2b5f64c62ca4ed5">H5Oget_info</a> to the group originally called Data.</p>
<p><em>Finding the number of links to an object</em> </p><div class="fragment"><div class="line">status = <a class="code hl_define" href="group___h5_o.html#gaf4f302a33faba9e1c2b5f64c62ca4ed5">H5Oget_info</a>(Data_loc_id, object_info);</div>
<div class="ttc" id="agroup___h5_o_html_gaf4f302a33faba9e1c2b5f64c62ca4ed5"><div class="ttname"><a href="group___h5_o.html#gaf4f302a33faba9e1c2b5f64c62ca4ed5">H5Oget_info</a></div><div class="ttdeci">#define H5Oget_info</div><div class="ttdef"><b>Definition</b> H5version.h:1097</div></div>
</div><!-- fragment --><p>It is possible to delete the last hard link to an object and not make the object inaccessible. Suppose your application opens a dataset, and then deletes the last hard link to the dataset. While the dataset is open, your application still has a connection to the dataset. If your application creates a hard link to the dataset before it closes the dataset, then the dataset will still be accessible.</p>
<h4>Symbolic Links</h4>
<p>Symbolic links are objects that assign a name in a group to a path. Notably, the target object is determined only when the symbolic link is accessed, and may, in fact, not exist. Symbolic links are not reference counted, so there may be zero, one, or more symbolic links to an object.</p>
<p>The major types of symbolic links are soft links and external links. Soft links are symbolic links within an HDF5 file and are created with the <a class="el" href="group___h5_l.html#ga894444623b58ce1ac3bd35538245ac78" title="Creates a soft link.">H5Lcreate_soft</a> function. Symbolic links to objects located in external files, in other words external links, can be created with the <a class="el" href="group___h5_l.html#ga15dfaeb9b1c0b3136533cb97ee45e683" title="Creates an external link, a soft link to an object in a different file.">H5Lcreate_external</a> function. Symbolic links are removed with the <a class="el" href="group___h5_l.html#ga5b4e7f59f5d4bdae94fd8ce6875295cf" title="Removes a link from a group.">H5Ldelete</a> function.</p>
<p>The example below shows the creating two soft links to the group /Data.</p>
<p><em>Create a soft link</em> </p><div class="fragment"><div class="line">status = <a class="code hl_function" href="group___h5_l.html#ga894444623b58ce1ac3bd35538245ac78">H5Lcreate_soft</a>(path_to_target, link_loc_id, <span class="stringliteral">&quot;Soft2&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line">status = <a class="code hl_function" href="group___h5_l.html#ga894444623b58ce1ac3bd35538245ac78">H5Lcreate_soft</a>(path_to_target, link_loc_id, <span class="stringliteral">&quot;Soft3&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="line">dataset = <a class="code hl_define" href="_h5version_8h.html#a7dba2e5b2045f31c0932123ffb54f7a3">H5Dopen</a>(file, <span class="stringliteral">&quot;/Soft2/CData&quot;</span>, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>);</div>
<div class="ttc" id="agroup___h5_l_html_ga894444623b58ce1ac3bd35538245ac78"><div class="ttname"><a href="group___h5_l.html#ga894444623b58ce1ac3bd35538245ac78">H5Lcreate_soft</a></div><div class="ttdeci">herr_t H5Lcreate_soft(const char *link_target, hid_t link_loc_id, const char *link_name, hid_t lcpl_id, hid_t lapl_id)</div><div class="ttdoc">Creates a soft link.</div></div>
</div><!-- fragment --><p>With the soft links defined in the example above, the dataset CData in the group /Data can now be opened with any of the names /Data/CData, /Soft2/CData, or /Soft3/CData.</p>
<p>In release 1.8.7, a cache was added to hold the names of files accessed via external links. The size of this cache can be changed to help improve performance. For more information, see the entry in the <a class="el" href="_r_m.html">HDF5 Reference Manual</a> for the <a class="el" href="group___f_a_p_l.html#gac21a815e9b133802df625c9f766ef325" title="Sets the number of files that can be held open in an external link open file cache.">H5Pset_elink_file_cache_size</a> function call.</p>
<h4>Note Regarding Hard Links and Soft Links</h4>
<p>Note that an object's existence in a file is governed by the presence of at least one hard link to that object. If the last hard link to an object is removed, the object is removed from the file and any remaining soft link becomes a dangling link, a link whose target object does not exist.</p>
<h4>Moving or Renaming Objects, and a Warning</h4>
<p>An object can be renamed by changing the name of a link to it with <a class="el" href="group___h5_l.html#ga0bbc7f9bf25c8aca9dd8433a325c8acb" title="Moves a link within an HDF5 file.">H5Lmove</a>. This has the same effect as creating a new link with the new name and deleting the link with the old name.</p>
<p>Exercise caution in the use of <a class="el" href="group___h5_l.html#ga0bbc7f9bf25c8aca9dd8433a325c8acb" title="Moves a link within an HDF5 file.">H5Lmove</a> and <a class="el" href="group___h5_l.html#ga5b4e7f59f5d4bdae94fd8ce6875295cf" title="Removes a link from a group.">H5Ldelete</a> as these functions each include a step that unlinks a pointer to an HDF5 object. If the link that is removed is on the only path leading to an HDF5 object, that object will become permanently inaccessible in the file.</p>
<h5>Scenario 1: Removing the Last Link</h5>
<p>To avoid removing the last link to an object or otherwise making an object inaccessible, use the <a class="el" href="group___h5_o.html#gaf4f302a33faba9e1c2b5f64c62ca4ed5">H5Oget_info</a> function. Make sure that the value of the reference count field (rc) is greater than 1.</p>
<h5>Scenario 2: Moving a Link that Isolates an Object</h5>
<p>Consider the following example: assume that the group group2 can only be accessed via the following path, where top_group is a member of the file's root group: <em>/top_group/group1/group2/</em></p>
<p>Using <a class="el" href="group___h5_l.html#ga0bbc7f9bf25c8aca9dd8433a325c8acb" title="Moves a link within an HDF5 file.">H5Lmove</a>, top_group is renamed to be a member ofgroup2. At this point, since top_group was the only route from the root group to group1, there is no longer a path by which one can access group1, group2, or any member datasets. And since top_group is now a member of group2, top_group itself and any member datasets have thereby also become inaccessible.</p>
<h4>Mounting a File</h4>
<p>An external link is a permanent connection between two files. A temporary connection can be set up with the <a class="el" href="group___h5_f.html#ga7c4865fd36ee25d839725252150bb53b" title="Mounts an HDF5 file.">H5Fmount</a> function. For more information, </p><dl class="section see"><dt>See also</dt><dd>sec_file. For more information, see the <a class="el" href="group___h5_f.html#ga7c4865fd36ee25d839725252150bb53b" title="Mounts an HDF5 file.">H5Fmount</a> function in the <a class="el" href="_r_m.html">HDF5 Reference Manual</a>.</dd></dl>
<h3><a class="anchor" id="subsubsec_group_program_info"></a>
Discovering Information about Objects</h3>
<p>There is often a need to retrieve information about a particular object. The <a class="el" href="group___h5_l.html#ga97279697f3010a6ad31dd7f4341eb698">H5Lget_info</a> and <a class="el" href="group___h5_o.html#gaf4f302a33faba9e1c2b5f64c62ca4ed5">H5Oget_info</a> functions fill this niche by returning a description of the object or link in an <a class="el" href="_h5version_8h.html#af542682cfe46de7b0759e52a1608d1e4">H5L_info_t</a> or <a class="el" href="_h5version_8h.html#a5f76b0cdd6d68d61f11e46d4f06e50d4">H5O_info_t</a> structure.</p>
<h3><a class="anchor" id="subsubsec_group_program_objs"></a>
Discovering Objects in a Group</h3>
<p>To examine all the objects or links in a group, use the <a class="el" href="group___t_r_a_v.html#ga55406698106930db68242987c11ba051">H5Literate</a> or <a class="el" href="group___h5_o.html#ga5ce86255fcc34ceaf84a62551cd24233">H5Ovisit</a> functions to examine the objects, and use the <a class="el" href="group___t_r_a_v.html#gac0558936502924d9e898d8b6e041ed69">H5Lvisit</a> function to examine the links. <a class="el" href="group___t_r_a_v.html#ga55406698106930db68242987c11ba051">H5Literate</a> is useful both with a single group and in an iterative process that examines an entire file or section of a file (such as the contents of a group or the contents of all the groups that are members of that group) and acts on objects as they are encountered. <a class="el" href="group___h5_o.html#ga5ce86255fcc34ceaf84a62551cd24233">H5Ovisit</a> recursively visits all objects accessible from a specified object. <a class="el" href="group___t_r_a_v.html#gac0558936502924d9e898d8b6e041ed69">H5Lvisit</a> recursively visits all the links starting from a specified group.</p>
<h3><a class="anchor" id="subsubsec_group_program_all"></a>
Discovering All of the Objects in the File</h3>
<p>The structure of an HDF5 file is self-describing, meaning that an application can navigate an HDF5 file to discover and understand all the objects it contains. This is an iterative process wherein the structure is traversed as a graph, starting at one node and recursively visiting linked nodes. To explore the entire file, the traversal should start at the root group.</p>
<h2><a class="anchor" id="subsec_group_examples"></a>
Examples of File Structures</h2>
<p>This section presents several samples of HDF5 file structures.</p>
<p>Figure 9 shows examples of the structure of a file with three groups and one dataset. The file in part a contains three groups: the root group and two member groups. In part b, the dataset dset1 has been created in /group1. In part c, a link named dset2 from /group2 to the dataset has been added. Note that there is only one copy of the dataset; there are two links to it and it can be accessed either as /group1/dset1 or as /group2/dset2.</p>
<p>Part d illustrates that one of the two links to the dataset can be deleted. In this case, the link from <em>/group1</em> has been removed. The dataset itself has not been deleted; it is still in the file but can only be accessed as <em>/group2/dset2</em></p>
<table class="doxtable">
<caption>Figure 9 - Some file structures</caption>
<tr>
<td><div class="image">
<img src="Groups_fig9_a.gif" alt=""/>
<div class="caption">
a) The file contains three groups: the root group, /group1, and /group2.</div></div>
  </td><td><div class="image">
<img src="Groups_fig9_b.gif" alt=""/>
<div class="caption">
b) The dataset dset1 (or /group1/dset1) is created in /group1.</div></div>
   </td></tr>
<tr>
<td><div class="image">
<img src="Groups_fig9_aa.gif" alt=""/>
<div class="caption">
c) A link named dset2 to the same dataset is created in /group2.</div></div>
  </td><td><div class="image">
<img src="Groups_fig9_bb.gif" alt=""/>
<div class="caption">
d) The link from /group1 to dset1 is removed. The dataset is</div></div>
 still in the file, but can be accessed only as /group2/dset2."
   &lt;/td&gt;
   &lt;/tr&gt;
   &lt;/table&gt;

   Figure 10 illustrates loops in an HDF5 file structure. The file in part a contains three groups
   and a dataset; group2 is a member of the root group and of the root group's other member group,
   group1. group2 thus can be accessed by either of two paths: /group2 or /group1/GXX. Similarly,
   the dataset can be accessed either as /group2/dset1 or as /group1/GXX/dset1.

   Part b illustrates a different case: the dataset is a member of a single group but with two links, or
   names, in that group. In this case, the dataset again has two names, /group1/dset1 and
   /group1/dset2.

   In part c, the dataset dset1 is a member of two groups, one of which can be accessed by either of
   two names. The dataset thus has three path names: /group1/dset1, /group2/dset2, and
   /group1/GXX/dset2.

   And in part d, two of the groups are members of each other and the dataset is a member of both
   groups. In this case, there are an infinite number of paths to the dataset because GXX and
   GYY can be traversed any number of times on the way from the root group, /, to the dataset. This
   can yield a path name such as /group1/GXX/GYY/GXX/GYY/GXX/dset2.

   &lt;table&gt;
   &lt;caption&gt;Figure 10 - More sample file structures&lt;/caption&gt;
   &lt;tr&gt;
   &lt;td&gt;
@image html Groups_fig10_a.gif "a) dset1 has two names: /group2/dset1 and /group1/GXX/dset1."
   &lt;/td&gt;
   &lt;td&gt;
@image html Groups_fig10_b.gif "b) dset1 again has two names: /group1/dset1 and /group1/dset2."
   &lt;/td&gt;
   &lt;/tr&gt;
   &lt;tr&gt;
   &lt;td&gt;
@image html Groups_fig10_c.gif "c) dset1 has three names: /group1/dset1, /group2/dset2, and /group1/GXX/dset2."
   &lt;/td&gt;
   &lt;td&gt;
@image html Groups_fig10_d.gif "d) dset1 has an infinite number of available path names."
   &lt;/td&gt;
   &lt;/tr&gt;
   &lt;/table&gt;

   Figure 11 takes us into the realm of soft links. The original file, in part a, contains only three
   hard links. In part b, a soft link named dset2 from group2 to /group1/dset1 has been created,
   making this dataset accessible as /group2/dset2.

   In part c, another soft link has been created in group2. But this time the soft link, dset3, points
   to a target object that does not yet exist. That target object, dset, has been added in part d and is
   now accessible as either /group2/dset or /group2/dset3.

   It could be said that HDF5 extends the organizing concepts of a file system to the internal
   structure of a single file.

   &lt;table&gt;
   &lt;caption&gt;Figure 11 - Hard and soft links&lt;/caption&gt;
   &lt;tr&gt;
   &lt;td&gt;
@image html Groups_fig11_a.gif "a) The file contains only hard links."
   &lt;/td&gt;
   &lt;td&gt;
@image html Groups_fig11_b.gif "b) A soft link is added from group2 to /group1/dset1."
   &lt;/td&gt;
   &lt;/tr&gt;
   &lt;tr&gt;
   &lt;td&gt;
@image html Groups_fig11_c.gif "c) A soft link named dset3 is added with a target that does not yet exist."
   &lt;/td&gt;
   &lt;td&gt;
@image html Groups_fig11_d.gif "d) The target of the soft link is created or linked."   </td></tr>
</table>
<p>Previous Chapter <a class="el" href="_h5_f__u_g.html#sec_file">The HDF5 File</a> - Next Chapter <a class="el" href="_h5_d__u_g.html#sec_dataset">HDF5 Datasets</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.10.0 </li>
  </ul>
</div>
</body>
</html>