summaryrefslogtreecommitdiffstats
path: root/develop/_h5_p__u_g.html
blob: 5d97a9d7b09b00fb6be7ae905fdcc8e01ddd648e (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
<!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: Properties and Property Lists in HDF5</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.4023fbc</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_p__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">Properties and Property Lists in HDF5</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="sec_plist"></a>
Properties and Property Lists in HDF5</h1>
<p>HDF5 property lists are the main vehicle to configure the behavior of HDF5 API functions.</p>
<p>Typically, property lists are created by instantiating one of the built-in or user-defined property list classes. After adding suitable properties, property lists are used when opening or creating HDF5 items, or when reading or writing data. Property lists can be modified by adding or changing properties. Property lists are deleted by closing the associated handles.</p>
<h2><a class="anchor" id="subsec_plist_intro"></a>
Introduction</h2>
<p>HDF5 properties and property lists make it possible to shape or modify an HDF5 file, group, dataset, attribute, committed datatype, or even an I/O stream, in a number of ways. For example, you can do any of the following: </p><ul>
<li>Customize the storage layout of a file to suit a project or task. </li>
<li>Create a chunked dataset. </li>
<li>Apply compression or filters to raw data. </li>
<li>Use either ASCII or UTF-8 character encodings. </li>
<li>Create missing groups on the fly. </li>
<li>Switch between serial and parallel I/O. </li>
<li>Create consistency within a single file or across an international project.</li>
</ul>
<p>Some properties enable an HDF5 application to take advantage of the capabilities of a specific computing environment while others make a file more compact; some speed the reading or writing of data while others enable more record-keeping at a per-object level. HDF5 offers nearly one hundred specific properties that can be used in literally thousands of combinations to maximize the usability of HDF5-stored data.</p>
<p>At the most basic level, a property list is a collection of properties, represented by name/value pairs that can be passed to various HDF5 functions, usually modifying default settings. A property list inherits a set of properties and values from a property list class. But that statement hardly provides a complete picture; in the rest of this section and in the next section, <a class="el" href="#subsec_plist_class">Property List Classes, Property Lists, and Properties</a> , we will discuss these things in much more detail. After reading that material, the reader should have a reasonably complete understanding of how properties and property lists can be used in HDF5 applications.</p>
<table class="doxtable">
<tr>
<td><div class="image">
<img src="PropListEcosystem.gif" alt=""/>
<div class="caption">
The HDF5 property environment</div></div>
   </td></tr>
</table>
<p>The remaining sections in this chapter discuss the following topics: </p><ul>
<li>What are properties, property lists, and property list classes? </li>
<li>Property list programming model </li>
<li>Generic property functions </li>
<li>Summary listings of property list functions </li>
<li>Additional resources</li>
</ul>
<p>The discussions and function listings in this chapter focus on general property operations, object and link properties, and related functions.</p>
<p>File, group, dataset, datatype, and attribute properties are discussed in the chapters devoted to those features, where that information will be most convenient to users. For example, <a class="el" href="_h5_d__u_g.html#sec_dataset">HDF5 Datasets</a> discusses dataset creation property lists and functions, dataset access property lists and functions, and dataset transfer property lists and functions. This chapter does not duplicate those discussions.</p>
<p>Generic property operations are an advanced feature and are beyond the scope of this guide.</p>
<p>This chapter assumes an understanding of the following chapters of this <a class="el" href="_u_g.html">HDF5 User Guide</a> </p><ul>
<li><a class="el" href="_h5_d_m__u_g.html#sec_data_model">The HDF5 Data Model and File Structure</a> </li>
<li><a class="el" href="_h5__u_g.html#sec_program">The HDF5 Library and Programming Model</a></li>
</ul>
<h2><a class="anchor" id="subsec_plist_class"></a>
Property List Classes, Property Lists, and Properties</h2>
<p>HDF5 property lists and the property list interface <a class="el" href="group___h5_p.html">Property Lists (H5P)</a> provide a mechanism for storing characteristics of objects in an HDF5 file and economically passing them around in an HDF5 application. In this capacity, property lists significantly reduce the burden of additional function parameters throughout the HDF5 API. Another advantage of property lists is that features can often be added to HDF5 by adding only property list functions to the API; this is particularly true when all other requirements of the feature can be accomplished internally to the library.</p>
<p>For instance, a file creation operation needs to know several things about a file, such as the size of the userblock or the sizes of various file data structures. Bundling this information as a property list simplifies the interface by reducing the number of parameters to the function <a class="el" href="group___h5_f.html#gae64b51ee9ac0781bc4ccc599d98387f4">H5Fcreate</a>.</p>
<p>As illustrated in the figure above ("The HDF5 property environment"), the HDF5 property environment is a three-level hierarchy: </p><ul>
<li>Property list classes </li>
<li>Property lists </li>
<li>Properties</li>
</ul>
<p>The following subsections discuss property list classes, property lists, and properties in more detail.</p>
<h3><a class="anchor" id="subsubsec_plist_class"></a>
Property List Classes</h3>
<p>A property list class defines the roles that property lists of that class can play. Each class includes all properties that are valid for that class with each property set to its default value. HDF5 offers a property lists class for each of the following situations.</p>
<a class="anchor" id="table_plist"></a>
<table class="doxtable">
<caption align="top">Property list classes in HDF5</caption>
<tr>
<th>Property List Class</th><th></th><th>For further discussion </th></tr>
<tr valign="top">
<td>File creation (FCPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#a206f334f1e6c973e1215a3148b45b977">H5P_FILE_CREATE</a>  </td><td>See various sections of <a class="el" href="_h5_f__u_g.html#sec_file">The HDF5 File</a>  </td></tr>
<tr valign="top">
<td>File access (FAPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#a60ec2d4334addfc0eda89614598ee38e">H5P_FILE_ACCESS</a>  </td><td>Used only as <a class="el" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>.   </td></tr>
<tr valign="top">
<td>File mount (FMPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#a3f57eb3c4081b40ff8b036f438e68e5b">H5P_FILE_MOUNT</a>  </td><td>For more information, see <a class="el" href="#FileMountProps">File Mount Properties</a>   </td></tr>
<tr valign="top">
<td>Object creation (OCPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#a42df2a1c964d2b985abc6e422abf6463">H5P_OBJECT_CREATE</a>  </td><td>See <a class="el" href="group___o_c_p_l.html">Object Creation Properties</a>   </td></tr>
<tr valign="top">
<td>Object copy (OCPYPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#a7cedfd989522e8d7697a414d1d707e43">H5P_OBJECT_COPY</a>  </td><td><p class="starttd"></p>
<p class="endtd"></p>
</td></tr>
<tr valign="top">
<td>Group creation (GCPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#a8330a95b257d45d6347a2daa96f261e9">H5P_GROUP_CREATE</a>  </td><td>See <a class="el" href="_h5_g__u_g.html#subsec_group_program">Programming Model for Groups</a>   </td></tr>
<tr valign="top">
<td>Group access (GAPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#aca0fe0d98945364fe1320bf3af056b9d">H5P_GROUP_ACCESS</a>  </td><td><p class="starttd"></p>
<p class="endtd"></p>
</td></tr>
<tr valign="top">
<td>Link creation (LCPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#ad2c1d10104f0262c826350ccbf7c49f2">H5P_LINK_CREATE</a>  </td><td>See examples in <a class="el" href="#subsec_plist_program">Programming Model for Properties and Property Lists</a> and <a class="el" href="group___l_c_p_l.html">Link Creation Properties</a>   </td></tr>
<tr valign="top">
<td>Link access (LAPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#a130a641715c9a0f3597792ce630fbe6f">H5P_LINK_ACCESS</a>  </td><td><p class="starttd"></p>
<p class="endtd"></p>
</td></tr>
<tr valign="top">
<td>Dataset creation (DCPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#afcd7f8186c404f3a1d768632eacba102">H5P_DATASET_CREATE</a>  </td><td>See <a class="el" href="_h5_d__u_g.html#subsec_dataset_program">Programming Model for Datasets</a>   </td></tr>
<tr valign="top">
<td>Dataset access (DAPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#afd849c0834c8ce6580b7c2537dbd9b5d">H5P_DATASET_ACCESS</a>  </td><td><p class="starttd"></p>
<p class="endtd"></p>
</td></tr>
<tr valign="top">
<td>Dataset transfer (DXPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#a6f9c8a5aba72c0445fff384bf418a80d">H5P_DATASET_XFER</a>  </td><td><p class="starttd"></p>
<p class="endtd"></p>
</td></tr>
<tr valign="top">
<td>Datatype creation (TCPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#a6d9318d499a66b4a934fe1839b29566e">H5P_DATATYPE_CREATE</a>  </td><td>See various sections of <a class="el" href="_h5_t__u_g.html#sec_datatype">HDF5 Datatypes</a>   </td></tr>
<tr valign="top">
<td>String creation (STRCPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#ad5c40cc58ce5ddb42dff95eb684bd6cf">H5P_STRING_CREATE</a>  </td><td>See <a class="el" href="_h5_d__u_g.html#subsec_dataset_program">Programming Model for Datasets</a> and <a class="el" href="_h5_t__u_g.html#subsec_datatype_program">Programming Model for Datatypes</a>   </td></tr>
<tr valign="top">
<td>Attribute creation (ACPL)  </td><td><a class="el" href="_h5_ppublic_8h.html#aa0102211c679e031e2e9831b66c48a12">H5P_ATTRIBUTE_CREATE</a>  </td><td>See <a class="el" href="_h5_a__u_g.html#subsec_attribute_work">Working with Attributes</a>.   </td></tr>
</table>
<p>Note: In the table above, the abbreviations to the right of each property list class name in this table are widely used in both HDF5 programmer documentation and HDF5 source code. For example, <a class="el" href="group___f_c_p_l.html">File Creation Properties</a> (FCPL) is the file creation property list, <a class="el" href="group___o_c_p_l.html">Object Creation Properties</a> (OCPL) is the object creation property list, <a class="el" href="group___o_c_p_y_p_l.html">Object Copy Properties</a> (OCPYPL) is object copy property list, and <a class="el" href="group___s_t_r_c_p_l.html">String Creation Properties</a> (STRCPL) is the string creation property list. These abbreviations may appear in either uppercase or lowercase.</p>
<p>The “HDF5 property list class inheritance hierarchy” figure, immediately following, illustrates the inheritance hierarchy of HDF5's property list classes. Properties are defined at the root of the HDF5 property environment (<a class="el" href="group___p_l_c_r.html">Property List Class Root</a> in the figure below). Property list classes then inherit properties from that root, either directly or indirectly through a parent class. In every case, a property list class inherits only the properties relevant to its role. For example, the <a class="el" href="group___o_c_p_l.html">Object Creation Properties</a> (OCPL) inherits all properties that are relevant to the creation of any object while the <a class="el" href="group___g_c_p_l.html">Group Creation Properties</a> (GCPL) inherits only those properties that are relevant to group creation.</p>
<table class="doxtable">
<tr>
<td><div class="image">
<img src="PropListClassInheritance.gif" alt=""/>
<div class="caption">
HDF5 property list class inheritance hierarchy</div></div>
   </td></tr>
</table>
<p>Note: In the figure above, property list classes displayed in black are directly accessible through the programming interface; the root of the property environment and the <a class="el" href="group___s_t_r_c_p_l.html">String Creation Properties</a> and <a class="el" href="group___o_c_p_l.html">Object Creation Properties</a> property list classes, in gray above, are not user-accessible. The red empty set symbol indicates that the <a class="el" href="group___f_m_p_l.html">File Mount Properties</a> (FMPL) is an empty class; that is, it has no set table properties. For more information, see <a class="el" href="#FileMountProps">File Mount Properties</a>. Abbreviations used in this figure are defined in the preceding table, <a class="el" href="#table_plist">Property list classes in HDF5</a>.</p>
<h3><a class="anchor" id="subsubsec_plist_lists"></a>
Property Lists</h3>
<p>A property list is a collection of related properties that are used together in specific circumstances. A new property list created from a property list class inherits the properties of the property list class and each property's default value. A fresh dataset creation property list, for example, includes all of the HDF5 properties relevant to the creation of a new dataset.</p>
<p>Property lists are implemented as containers holding a collection of name/value pairs. Each pair specifies a property name and a value for the property. A property list usually contains information for one to many properties.</p>
<p>HDF5's default property values are designed to be reasonable for general use cases. Therefore, an application can often use a property list without modification. On the other hand, adjusting property list settings is a routine action and there are many reasons for an application to do so.</p>
<p>A new property list may either be derived from a property list class or copied from an existing property list. When a property list is created from a property list class, it contains all the properties that are relevant to the class, with each property set to its default value. A new property list created by copying an existing property list will contain the same properties and property values as the original property list. In either case, the property values can be changed as needed through the HDF5 API.</p>
<p>Property lists can be freely reused to create consistency. For example, a single set of file, group, and dataset creation property lists might be created at the beginning of a project and used to create hundreds, thousands, even millions, of consistent files, file structures, and datasets over the project's life. When such consistency is important to a project, this is an economical means of providing it.</p>
<h3><a class="anchor" id="subsubsec_plist_props"></a>
Properties</h3>
<p>A property is the basic element of the property list hierarchy. HDF5 offers nearly one hundred properties controlling things ranging from file access rights, to the storage layout of a dataset, through optimizing the use of a parallel computing environment.</p>
<p>Further examples include the following: </p><table class="doxtable">
<tr>
<th>Purpose</th><th>Examples</th><th>Property List </th></tr>
<tr valign="top">
<td>Specify the driver to be used to open a file  </td><td>A POSIX driver or an MPI IO driver  </td><td><a class="el" href="group___f_a_p_l.html">File Access Properties</a>  </td></tr>
<tr valign="top">
<td>Specify filters to be applied to a dataset  </td><td>Gzip compression or checksum evaluation  </td><td><a class="el" href="group___d_c_p_l.html">Dataset Creation Properties</a>   </td></tr>
<tr valign="top">
<td>Specify whether to record key times associated with an object  </td><td>Creation time and/or last-modified time  </td><td><a class="el" href="group___o_c_p_l.html">Object Creation Properties</a>   </td></tr>
<tr valign="top">
<td>Specify the access mode for a file opened via an external link  </td><td>Read-only or read-write  </td><td><a class="el" href="group___l_a_p_l.html">Link Access Properties</a>   </td></tr>
</table>
<p>Each property is initialized with a default value. For each property, there are one or more dedicated H5Pset_*calls that can be used to change that value.</p>
<h4>Creation, access, and transfer properties:</h4>
<p>Properties fall into one of several major categories: creation properties, access properties, and transfer properties.</p>
<p>Creation properties control permanent object characteristics. These characteristics must be established when an object is created, cannot change through the life of the object (they are immutable), and the property setting usually has a permanent presence in the file.</p>
<table class="doxtable">
<caption align="top">Examples of creation properties include:</caption>
<tr>
<td><p class="starttd"></p>
<p class="intertd">Whether a dataset is stored in a compact, contiguous, or chunked layout <br  />
 <br  />
 The default for this dataset creation property (<a class="el" href="group___d_c_p_l.html#ga75d80991a8f467e0d454c53a383ae7f9">H5Pset_layout</a>) is that a dataset is stored in a contiguous block. This works well for datasets with a known size limit that will fit easily in system memory. <br  />
 <br  />
 A chunked layout is important if a dataset is to be compressed, to enable extending the dataset's size, or to enable caching during I/O. <br  />
 <br  />
 A compact layout is suitable only for very small datasets because the raw data is stored in the object header. </p>
<p class="endtd"></p>
</td></tr>
<tr>
<td><p class="starttd"></p>
<p class="intertd">Creation of intermediate groups when adding an object to an HDF5 file<br  />
 <br  />
 This link creation property, <a class="el" href="group___l_c_p_l.html#ga66c4c5d3f34e5cf65d00e47a5387383c">H5Pset_create_intermediate_group</a>, enables an application to add an object in a file without having to know that the group or group hierarchy containing that object already exists. With this property set, HDF5 automatically creates missing groups. If this property is not set, an application must verify that each group in the path exists, and create those that do not, before creating the new object; if any group is missing, the create operation will fail. </p>
<p class="endtd"></p>
</td></tr>
<tr>
<td><p class="starttd"></p>
<p class="intertd">Whether an HDF5 file is a single file or a set of tightly related files that form a virtual HDF5 file<br  />
 <br  />
 Certain file creation properties enable the application to select one of several file layouts. Examples of the available layouts include a standard POSIX-compliant layout (<a class="el" href="group___f_a_p_l.html#gaf581bceca36ad4eef3cd45b16eabbb20">H5Pset_fapl_sec2</a>), a family of files (<a class="el" href="group___f_a_p_l.html#ga95d19da25f196ce1ace10af00f49ab53">H5Pset_fapl_family</a>), and a split file layout that separates raw data and metadata into separate files (<a class="el" href="group___f_a_p_l.html#ga502f1ad38f5143cf281df8282fef26ed">H5Pset_fapl_split</a>). These and other file layout options are discussed in <a class="el" href="_h5_f__u_g.html#subsec_file_alternate_drivers">Alternate File Storage Layouts and Low-level File Drivers</a>. </p>
<p class="endtd"></p>
</td></tr>
<tr>
<td><p class="starttd"></p>
<p class="intertd">To enable error detection when creating a dataset<br  />
 <br  />
 In settings where data integrity is vulnerable, it may be desirable to set checksumming when datasets are created (<a class="el" href="group___o_c_p_l.html#ga8bc81abfbd0393b0a46e121f817a3f81">H5Pset_fletcher32</a>). A subsequent application will then have a means to verify data integrity when reading the dataset. </p>
<p class="endtd"></p>
</td></tr>
</table>
<p>Access properties control transient object characteristics. These characteristics may change with the circumstances under which an object is accessed.</p>
<table class="doxtable">
<caption align="top">Examples of access properties include:</caption>
<tr>
<td><p class="starttd"></p>
<p class="intertd">The driver used to open a file<br  />
 <br  />
 For example, a file might be created with the MPI I/O driver (<a class="el" href="group___f_a_p_l.html#gaa0204810c1fea1667d62cf7c176416ff">H5Pset_fapl_mpio</a>) during high-speed data acquisition in a parallel computing environment. The same file might later be analyzed in a serial computing environment with I/O access handled through the serial POSIX driver (<a class="el" href="group___f_a_p_l.html#gaf581bceca36ad4eef3cd45b16eabbb20">H5Pset_fapl_sec2</a>). </p>
<p class="endtd"></p>
</td></tr>
<tr>
<td><p class="starttd"></p>
<p class="intertd">Optimization settings in specialized environments<br  />
 <br  />
 Optimizations differ across computing environments and according to the needs of the task being performed, so are transient by nature. </p>
<p class="endtd"></p>
</td></tr>
</table>
<p>Transfer properties apply only to datasets and control transient aspects of data I/O. These characteristics may change with the circumstances under which data is accessed.</p>
<table class="doxtable">
<caption align="top">Examples of dataset transfer properties include:</caption>
<tr>
<td><p class="starttd"></p>
<p class="intertd">To enable error detection when reading a dataset<br  />
 <br  />
 If checksumming has been set on a dataset (with <a class="el" href="group___o_c_p_l.html#ga8bc81abfbd0393b0a46e121f817a3f81">H5Pset_fletcher32</a>, in the dataset creation property list), an application reading that dataset can choose whether to check for data integrity (<a class="el" href="group___d_x_p_l.html#ga0d95dfa506784acc9aed850c99713609">H5Pset_edc_check</a>). </p>
<p class="endtd"></p>
</td></tr>
<tr>
<td><p class="starttd"></p>
<p class="intertd">Various properties to optimize chunked data I/O on parallel computing systems<br  />
 <br  />
 HDF5 provides several properties for tuning I/O of chunked datasets in a parallel computing environment (<a class="el" href="group___d_x_p_l.html#gadc911ad42f580ce2df327383188ed4ba">H5Pset_dxpl_mpio_chunk_opt</a>, <a class="el" href="group___d_x_p_l.html#gaaf5f3432a7d1a1c3f8e3eee6a3dc9810">H5Pset_dxpl_mpio_chunk_opt_num</a>, <a class="el" href="group___d_x_p_l.html#ga0b53b19c37bda96d3578ce38b3858ea3">H5Pset_dxpl_mpio_chunk_opt_ratio</a>, and <a class="el" href="group___d_x_p_l.html#ga37ec8c3b3f1880ed6e1b300bc4ee9ed5">H5Pget_mpio_actual_chunk_opt_mode</a>).<br  />
 <br  />
 Optimal settings differ due to the characteristics of a computing environment and due to an application's data access patterns; even when working with the same file, these settings might change for every application and every platform. </p>
<p class="endtd"></p>
</td></tr>
</table>
<h2><a class="anchor" id="subsec_plist_program"></a>
Programming Model for Properties and Property Lists</h2>
<p>The programming model for HDF5 property lists is actually quite simple: </p><ul>
<li>Create a property list. </li>
<li>Modify the property list, if required. </li>
<li>Use the property list. </li>
<li>Close the property list.</li>
</ul>
<p>There are nuances, of course, but that is the basic process.</p>
<p>In some cases, you will not have to define property lists at all. If the default property settings are sufficient for your application, you can tell HDF5 to use the default property list.</p>
<p>The following sections first discuss the use of default property lists, then each step of the programming model, and finally a few less frequently used property list operations.</p>
<h3><a class="anchor" id="subsubsec_plist_default"></a>
Using Default Property Lists</h3>
<p>Default property lists can simplify many routine HDF5 tasks because you do not always have to create every property list you use.</p>
<p>An application that would be well-served by HDF5's default property settings can use the default property lists simply by substituting the value <a class="el" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a> for a property list identifier. HDF5 will then apply the default property list for the appropriate property list class.</p>
<p>For example, the function <a class="el" href="group___h5_d.html#gabf62045119f4e9c512d87d77f2f992df">H5Dcreate2</a> calls for a link creation property list, a dataset creation property list, and a dataset access property list. If the default properties are suitable for a dataset, this call can be made as </p><div class="fragment"><div class="line">dset_id = <a class="code hl_function" href="group___h5_d.html#gabf62045119f4e9c512d87d77f2f992df">H5Dcreate2</a>( loc_id, name, dtype_id, space_id, <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_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_d_html_gabf62045119f4e9c512d87d77f2f992df"><div class="ttname"><a href="group___h5_d.html#gabf62045119f4e9c512d87d77f2f992df">H5Dcreate2</a></div><div class="ttdeci">hid_t H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t lcpl_id, hid_t dcpl_id, hid_t dapl_id)</div><div class="ttdoc">Creates a new dataset and links it into the file.</div></div>
</div><!-- fragment --><p> HDF5 will then apply the default link creation, dataset creation, and dataset access property lists correctly.</p>
<p>Of course, you would not want to do this without considering where it is appropriate, as there may be unforeseen consequences. Consider, for example, the use of chunked datasets. Optimal chunking is quite dependent on the makeup of the dataset and the most common access patterns, both of which must be taken into account in setting up the size and shape of chunks.</p>
<h3><a class="anchor" id="subsubsec_plist_basic"></a>
Basic Steps of the Programming Model</h3>
<p>The steps of the property list programming model are described in the sub-sections below.</p>
<h4>Create a Property List</h4>
<p>A new property list can be created either as an instance of a property list class or by copying an existing property list. Consider the following examples. A new dataset creation property list is first created "from scratch" with <a class="el" href="group___p_l_c_r.html#gaf1b11da01d4d45d788c45f8bc5f0cbfa">H5Pcreate</a>. A second dataset creation property list is then created by copying the first one with <a class="el" href="group___p_l_c_r.html#gad2663ccbcbf76b96cde4c104588ae21b">H5Pcopy</a>.</p>
<div class="fragment"><div class="line">dcplA_id = <a class="code hl_function" href="group___p_l_c_r.html#gaf1b11da01d4d45d788c45f8bc5f0cbfa">H5Pcreate</a> (<a class="code hl_define" href="_h5_ppublic_8h.html#afcd7f8186c404f3a1d768632eacba102">H5P_DATASET_CREATE</a>);</div>
<div class="ttc" id="a_h5_ppublic_8h_html_afcd7f8186c404f3a1d768632eacba102"><div class="ttname"><a href="_h5_ppublic_8h.html#afcd7f8186c404f3a1d768632eacba102">H5P_DATASET_CREATE</a></div><div class="ttdeci">#define H5P_DATASET_CREATE</div><div class="ttdef"><b>Definition</b> H5Ppublic.h:53</div></div>
<div class="ttc" id="agroup___p_l_c_r_html_gaf1b11da01d4d45d788c45f8bc5f0cbfa"><div class="ttname"><a href="group___p_l_c_r.html#gaf1b11da01d4d45d788c45f8bc5f0cbfa">H5Pcreate</a></div><div class="ttdeci">hid_t H5Pcreate(hid_t cls_id)</div><div class="ttdoc">Creates a new property list as an instance of a property list class.</div></div>
</div><!-- fragment --><p>The new dataset creation property list is created as an instance of the property list class <a class="el" href="_h5_ppublic_8h.html#afcd7f8186c404f3a1d768632eacba102">H5P_DATASET_CREATE</a>.</p>
<p>The new dataset creation property list's identifier is returned in dcplA_id and the property list is initialized with default dataset creation property values.</p>
<p>A list of valid classes appears in the table <a class="el" href="#table_plist">Property list classes in HDF5</a>.</p>
<div class="fragment"><div class="line">dcplB_id = <a class="code hl_function" href="group___p_l_c_r.html#gad2663ccbcbf76b96cde4c104588ae21b">H5Pcopy</a> (dcplA_id);</div>
<div class="ttc" id="agroup___p_l_c_r_html_gad2663ccbcbf76b96cde4c104588ae21b"><div class="ttname"><a href="group___p_l_c_r.html#gad2663ccbcbf76b96cde4c104588ae21b">H5Pcopy</a></div><div class="ttdeci">hid_t H5Pcopy(hid_t plist_id)</div><div class="ttdoc">Copies an existing property list to create a new property list.</div></div>
</div><!-- fragment --><p>A new dataset creation property list, dcplB_id, is created as a copy of dcplA_id and is initialized with dataset creation property values currently in dcplA_id.</p>
<p>At this point, dcplA_id and dcplB_id are identical; they will both contain any modified property values that were changed in dcplA_id before dcplB_id was created. They may, however, diverge as additional property values are reset in each.</p>
<p>While we are creating property lists, let's create a link creation property list; we will need this property list when the new dataset is linked into the file below: </p><div class="fragment"><div class="line">lcplAB_id = <a class="code hl_function" href="group___p_l_c_r.html#gaf1b11da01d4d45d788c45f8bc5f0cbfa">H5Pcreate</a> (<a class="code hl_define" href="_h5_ppublic_8h.html#ad2c1d10104f0262c826350ccbf7c49f2">H5P_LINK_CREATE</a>);</div>
<div class="ttc" id="a_h5_ppublic_8h_html_ad2c1d10104f0262c826350ccbf7c49f2"><div class="ttname"><a href="_h5_ppublic_8h.html#ad2c1d10104f0262c826350ccbf7c49f2">H5P_LINK_CREATE</a></div><div class="ttdeci">#define H5P_LINK_CREATE</div><div class="ttdef"><b>Definition</b> H5Ppublic.h:67</div></div>
</div><!-- fragment --><h4>Change Property Values</h4>
<p>This section describes how to set property values.</p>
<p>Later in this section, the dataset creation property lists dcplA_id and dcplB_id created in the section above will be used respectively to create chunked and contiguous datasets. To set this up, we must set the layout property in each property list. The following example sets dcplA_id for chunked datasets and dcplB_id for contiguous datasets: </p><div class="fragment"><div class="line">error = <a class="code hl_function" href="group___d_c_p_l.html#ga75d80991a8f467e0d454c53a383ae7f9">H5Pset_layout</a> (dcplA_id, <a class="code hl_enumvalue" href="_h5_dpublic_8h.html#a57e163d4c263b585ca2d904996f5e06eadc846667d1f23d573964d22549e5f262">H5D_CHUNKED</a>);</div>
<div class="line">error = <a class="code hl_function" href="group___d_c_p_l.html#ga75d80991a8f467e0d454c53a383ae7f9">H5Pset_layout</a> (dcplB_id, <a class="code hl_enumvalue" href="_h5_dpublic_8h.html#a57e163d4c263b585ca2d904996f5e06ea6161acec1a11680d488b5bb8694c79f1">H5D_CONTIGUOUS</a>);</div>
<div class="ttc" id="a_h5_dpublic_8h_html_a57e163d4c263b585ca2d904996f5e06ea6161acec1a11680d488b5bb8694c79f1"><div class="ttname"><a href="_h5_dpublic_8h.html#a57e163d4c263b585ca2d904996f5e06ea6161acec1a11680d488b5bb8694c79f1">H5D_CONTIGUOUS</a></div><div class="ttdeci">@ H5D_CONTIGUOUS</div><div class="ttdef"><b>Definition</b> H5Dpublic.h:47</div></div>
<div class="ttc" id="a_h5_dpublic_8h_html_a57e163d4c263b585ca2d904996f5e06eadc846667d1f23d573964d22549e5f262"><div class="ttname"><a href="_h5_dpublic_8h.html#a57e163d4c263b585ca2d904996f5e06eadc846667d1f23d573964d22549e5f262">H5D_CHUNKED</a></div><div class="ttdeci">@ H5D_CHUNKED</div><div class="ttdef"><b>Definition</b> H5Dpublic.h:48</div></div>
<div class="ttc" id="agroup___d_c_p_l_html_ga75d80991a8f467e0d454c53a383ae7f9"><div class="ttname"><a href="group___d_c_p_l.html#ga75d80991a8f467e0d454c53a383ae7f9">H5Pset_layout</a></div><div class="ttdeci">herr_t H5Pset_layout(hid_t plist_id, H5D_layout_t layout)</div><div class="ttdoc">Sets the type of storage used to store the raw data for a dataset.</div></div>
</div><!-- fragment --><p>Since dcplA_id specifies a chunked layout, we must also set the number of dimensions and the size of the chunks. The example below specifies that datasets created with dcplA_id will be 3-dimensional and that the chunk size will be 100 in each dimension: </p><div class="fragment"><div class="line">error = <a class="code hl_function" href="group___d_c_p_l.html#ga3584d592e377da3604b7604e266dcf5b">H5Pset_chunk</a> (dcplA_id, 3, [100,100,100]);</div>
<div class="ttc" id="agroup___d_c_p_l_html_ga3584d592e377da3604b7604e266dcf5b"><div class="ttname"><a href="group___d_c_p_l.html#ga3584d592e377da3604b7604e266dcf5b">H5Pset_chunk</a></div><div class="ttdeci">herr_t H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t dim[])</div><div class="ttdoc">Sets the size of the chunks used to store a chunked layout dataset.</div></div>
</div><!-- fragment --><p>These datasets will be created with UTF-8 encoded names. To accomplish that, the following example sets the character encoding property in the link creation property list to create link names with UTF-8 encoding: </p><div class="fragment"><div class="line">error = <a class="code hl_function" href="group___a_c_p_l.html#gad4fa8e2d17236786f770cf17eef908cc">H5Pset_char_encoding</a> (lcplAB_id, <a class="code hl_enumvalue" href="_h5_tpublic_8h.html#a03755b8370672668ddc7063add28e71aa41685667f69bf81eb7de5dd5f452e658">H5T_CSET_UTF8</a>);</div>
<div class="ttc" id="a_h5_tpublic_8h_html_a03755b8370672668ddc7063add28e71aa41685667f69bf81eb7de5dd5f452e658"><div class="ttname"><a href="_h5_tpublic_8h.html#a03755b8370672668ddc7063add28e71aa41685667f69bf81eb7de5dd5f452e658">H5T_CSET_UTF8</a></div><div class="ttdeci">@ H5T_CSET_UTF8</div><div class="ttdef"><b>Definition</b> H5Tpublic.h:96</div></div>
<div class="ttc" id="agroup___a_c_p_l_html_gad4fa8e2d17236786f770cf17eef908cc"><div class="ttname"><a href="group___a_c_p_l.html#gad4fa8e2d17236786f770cf17eef908cc">H5Pset_char_encoding</a></div><div class="ttdeci">herr_t H5Pset_char_encoding(hid_t plist_id, H5T_cset_t encoding)</div><div class="ttdoc">Sets the character encoding used to encode link and attribute names.</div></div>
</div><!-- fragment --><p>dcplA_id can now be used to create chunked datasets and dcplB_id to create contiguous datasets. And with the use of lcplAB_id, they will be created with UTF-8 encoded names.</p>
<h4>Use the Property List</h4>
<p>Once the required property lists have been created, they can be used to control various HDF5 processes. For illustration, consider dataset creation.</p>
<p>Assume that the datatype dtypeAB and the dataspaces dspaceA and dspaceB have been defined and that the location identifier locAB_id specifies the group AB in the current HDF5 file. We have already created the required link creation and dataset creation property lists. For the sake of illustration, we assume that the default dataset access property list meets our application requirements. The following calls would create the datasets dsetA and dsetB in the group AB. The raw data in dsetA will be contiguous while dsetB raw data will be chunked; both datasets will have UTF-8 encoded link names:</p>
<div class="fragment"><div class="line">dsetA_id = <a class="code hl_function" href="group___h5_d.html#gabf62045119f4e9c512d87d77f2f992df">H5Dcreate2</a>( locAB_id, dsetA, dtypeAB, dspaceA_id,</div>
<div class="line">           lcplAB_id, dcplA_id, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a> );</div>
<div class="line">dsetB_id = <a class="code hl_function" href="group___h5_d.html#gabf62045119f4e9c512d87d77f2f992df">H5Dcreate2</a>( locAB_id, dsetB, dtypeAB, dspaceB_id,</div>
<div class="line">           lcplAB_id, dcplB_id, <a class="code hl_define" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a> );</div>
</div><!-- fragment --><h4>Close the Property List</h4>
<p>Generally, creating or opening anything in an HDF5 file results in an HDF5 identifier. These identifiers are of HDF5 type hid_t and include things like file identifiers, often expressed as file_id; dataset identifiers, dset_id; and property list identifiers, plist_id. To reduce the risk of memory leaks, all of these identifiers must be closed once they are no longer needed.</p>
<p>Property list identifiers are no exception to this rule, and <a class="el" href="group___p_l_c_r.html#ga5dce61149211d3ef319452aa598887fb">H5Pclose</a> is used for this purpose. The calls immediately following would close the property lists created and used in the examples above.</p>
<div class="fragment"><div class="line">error = <a class="code hl_function" href="group___p_l_c_r.html#ga5dce61149211d3ef319452aa598887fb">H5Pclose</a> (dcplA_id);</div>
<div class="line">error = <a class="code hl_function" href="group___p_l_c_r.html#ga5dce61149211d3ef319452aa598887fb">H5Pclose</a> (dcplB_id);</div>
<div class="line">error = <a class="code hl_function" href="group___p_l_c_r.html#ga5dce61149211d3ef319452aa598887fb">H5Pclose</a> (lcplAB_id);</div>
<div class="ttc" id="agroup___p_l_c_r_html_ga5dce61149211d3ef319452aa598887fb"><div class="ttname"><a href="group___p_l_c_r.html#ga5dce61149211d3ef319452aa598887fb">H5Pclose</a></div><div class="ttdeci">herr_t H5Pclose(hid_t plist_id)</div><div class="ttdoc">Terminates access to a property list.</div></div>
</div><!-- fragment --><h3><a class="anchor" id="subsubsec_plist_additional"></a>
Additional Property List Operations</h3>
<p>A few property list operations fall outside of the programming model described above. This section describes those operations.</p>
<h4>Query the Class of an Existing Property List</h4>
<p>Occasionally an application will have a property list but not know the corresponding property list class. A call such as in the following example will retrieve the unknown class of a known property list: </p><div class="fragment"><div class="line">PList_Class = <a class="code hl_function" href="group___p_l_c_r.html#ga9b230c1e85790f9f45c4ca2e79dd62c5">H5Pget_class</a> (dcplA_id);</div>
<div class="ttc" id="agroup___p_l_c_r_html_ga9b230c1e85790f9f45c4ca2e79dd62c5"><div class="ttname"><a href="group___p_l_c_r.html#ga9b230c1e85790f9f45c4ca2e79dd62c5">H5Pget_class</a></div><div class="ttdeci">hid_t H5Pget_class(hid_t plist_id)</div><div class="ttdoc">Returns the property list class identifier for a property list.</div></div>
</div><!-- fragment --><p>Upon this function's return, PList_Class will contain the value <a class="el" href="_h5_ppublic_8h.html#afcd7f8186c404f3a1d768632eacba102">H5P_DATASET_CREATE</a> indicating that dcplA_id is a dataset creation property list.</p>
<h4>Determine Current Creation Property List Settings in an Existing Object</h4>
<p>After a file has been created, another application may work on the file without knowing how the creation properties for the file were set up. Retrieving these property values is often unnecessary; HDF5 can read the data and knows how to deal with any properties it encounters.</p>
<p>But sometimes an application must do something that requires knowing the creation property settings. HDF5 makes the acquisition of this information fairly straight-forward; for each property setting call, H5Pset_*, there is a corresponding H5Pget_*call to retrieve the property's current setting.</p>
<p>Consider the following examples which illustrate the determination of dataset layout and chunking settings:</p>
<p>The application must first identify the creation property list with the appropriate get creation property list call. There is one such call for each kind of object.</p>
<p><a class="el" href="group___h5_d.html#ga8848f14f4aba8e6160c3d8bb7f1be163">H5Dget_create_plist</a> will return a property list identifier for the creation property list that was used to create the dataset. Call it DCPL1_id.</p>
<p><a class="el" href="group___d_c_p_l.html#ga75d80991a8f467e0d454c53a383ae7f9">H5Pset_layout</a> sets a dataset's layout to be compact, contiguous, or chunked.</p>
<p><a class="el" href="group___d_c_p_l.html#ga655530b0f40990507fedeef6b3068db3">H5Pget_layout</a> called with DCPL1_id will return the dataset's layout, either <a class="el" href="_h5_dpublic_8h.html#a57e163d4c263b585ca2d904996f5e06ea922bab7d90bea9d3a0bb9082e0ca334d">H5D_COMPACT</a>, <a class="el" href="_h5_dpublic_8h.html#a57e163d4c263b585ca2d904996f5e06ea6161acec1a11680d488b5bb8694c79f1">H5D_CONTIGUOUS</a>, or <a class="el" href="_h5_dpublic_8h.html#a57e163d4c263b585ca2d904996f5e06eadc846667d1f23d573964d22549e5f262">H5D_CHUNKED</a>.</p>
<p><a class="el" href="group___d_c_p_l.html#ga3584d592e377da3604b7604e266dcf5b">H5Pset_chunk</a> sets the rank of a dataset, that is the number of dimensions it will have, and the maximum size of each dimension.</p>
<p><a class="el" href="group___d_c_p_l.html#ga4ef814034f601f48ab1ed6db79b4354c">H5Pget_chunk</a>, also called with DCPL1_id, will return the rank of the dataset and the maximum size of each dimension.</p>
<p>If a creation property value has not been explicitly set, these H5Pget_calls will return the property's default value.</p>
<h4>Determine Access Property Settings</h4>
<p>Access property settings are quite different from creation properties. Since access property settings are not retained in an HDF5 file or object, there is normally no knowledge of the settings that were used in the past. On the other hand, since access properties do not affect characteristics of the file or object, this is not normally an issue. For more information, see "Access and
   Creation Property Exceptions."</p>
<p>One circumstance under which an application might need to determine access property settings might be when a file or object is already open but the application does not know the property list settings. In that case, the application can use the appropriate get access property list call to retrieve a property list identifier. For example, if the dataset dsetA from the earlier examples is still open, the following call would return an identifier for the dataset access property list in use: </p><div class="fragment"><div class="line">dsetA_dacpl_id = <a class="code hl_function" href="group___h5_d.html#ga252c0ddac7a7817bd757190e7398353b">H5Dget_access_plist</a>( dsetA_id );</div>
<div class="ttc" id="agroup___h5_d_html_ga252c0ddac7a7817bd757190e7398353b"><div class="ttname"><a href="group___h5_d.html#ga252c0ddac7a7817bd757190e7398353b">H5Dget_access_plist</a></div><div class="ttdeci">hid_t H5Dget_access_plist(hid_t dset_id)</div><div class="ttdoc">Returns the dataset access property list associated with a dataset.</div></div>
</div><!-- fragment --><p>The application could then use the returned property list identifier to analyze the property settings</p>
<h2><a class="anchor" id="subsec_plist_generic"></a>
Generic Properties Interface and User-defined Properties</h2>
<p>HDF5's generic property interface provides tools for managing the entire property hierarchy and for the creation and management of user-defined property lists and properties. This interface also makes it possible for an application or a driver to create, modify, and manage custom properties, property lists, and property list classes. A comprehensive list of functions for this interface appears under "Generic Property Operations (Advanced)" in the "H5P: Property List Interface" section of the <a class="el" href="_r_m.html">HDF5 Reference Manual</a>.</p>
<p>Further discussion of HDF5's generic property interface and user-defined properties and property lists is beyond the scope of this document.</p>
<h2><a class="anchor" id="subsec_plist_H5P"></a>
Property List Function Summaries</h2>
<p>General property functions, generic property functions and macros, property functions that are used with multiple types of objects, and object and link property functions are listed below.</p>
<p>Property list functions that apply to a specific type of object are listed in the chapter that discusses that object. For example, the <a class="el" href="_h5_d__u_g.html#sec_dataset">HDF5 Datasets</a> chapter has two property list function listings: one for dataset creation property list functions and one for dataset access property list functions. As has been stated, this chapter is not intended to describe every property list function.</p>
<p><a class="el" href="group___h5_p.html">Property Lists (H5P)</a> reference manual</p>
<h2><a class="anchor" id="subsec_plist_resources"></a>
Additional Property List Resources</h2>
<p>Property lists are ubiquitous in an HDF5 environment and are therefore discussed in many places in HDF5 documentation. The following sections and listings in the <a class="el" href="_u_g.html">HDF5 User Guide</a> are of particular interest: </p><ul>
<li>In the <a class="el" href="_h5_d_m__u_g.html#sec_data_model">The HDF5 Data Model and File Structure</a> chapter, see <a class="el" href="_h5_d_m__u_g.html#subsubsec_data_model_abstract_plist">Property List</a>. </li>
<li>In the <a class="el" href="_h5_f__u_g.html#sec_file">The HDF5 File</a> chapter, see the following sections and listings: <ul>
<li>
<a class="el" href="_h5_f__u_g.html#subsec_file_creation_access">File Creation and File Access Properties</a> </li>
<li>
<a class="el" href="_h5_f__u_g.html#subsec_file_property_lists">File Property Lists</a> </li>
<li>
<a class="el" href="_h5_f__u_g.html#subsubsec_file_examples_props">Example with the File Creation Property List</a> </li>
<li>
<a class="el" href="_h5_f__u_g.html#subsubsec_file_examples_access">Example with the File Access Property List</a> </li>
<li>
<a class="el" href="_h5_d__u_g.html#dcpl_table_tag">Dataset creation property list functions (H5P)</a> </li>
<li>
<a class="el" href="_h5_f__u_g.html#fapl_table_tag">File access property list functions (H5P)</a> </li>
<li>
<a class="el" href="_h5_f__u_g.html#fd_pl_table_tag">File driver property list functions (H5P)</a></li>
</ul>
</li>
<li>In the <a class="el" href="_h5_a__u_g.html#sec_attribute">HDF5 Attributes</a> chapter, see "Attribute creation property list functions (H5P)". </li>
<li>In the <a class="el" href="_h5_g__u_g.html#sec_group">HDF5 Groups</a> chapter, see "Group creation property list functions (H5P)". </li>
<li>Property lists are discussed throughout <a class="el" href="_h5_d__u_g.html#sec_dataset">HDF5 Datasets</a>.</li>
</ul>
<p>All property list functions are described in the <a class="el" href="group___h5_p.html">Property Lists (H5P)</a> section of the <a class="el" href="_r_m.html">HDF5 Reference Manual</a>. The function index at the top of the page provides a categorized listing grouped by property list class. Those classes are listed below: </p><ul>
<li><a class="el" href="group___f_c_p_l.html">File Creation Properties</a> </li>
<li><a class="el" href="group___f_a_p_l.html">File Access Properties</a> </li>
<li><a class="el" href="group___g_c_p_l.html">Group Creation Properties</a> </li>
<li><a class="el" href="group___d_c_p_l.html">Dataset Creation Properties</a> </li>
<li><a class="el" href="group___d_a_p_l.html">Dataset Access Properties</a> </li>
<li><a class="el" href="group___d_x_p_l.html">Dataset Transfer Properties</a> </li>
<li><a class="el" href="group___l_c_p_l.html">Link Creation Properties</a> </li>
<li><a class="el" href="group___l_a_p_l.html">Link Access Properties</a> </li>
<li><a class="el" href="group___o_c_p_l.html">Object Creation Properties</a> </li>
<li><a class="el" href="group___o_c_p_y_p_l.html">Object Copy Properties</a></li>
</ul>
<p>Additional categories not related to the class structure are as follows: </p><ul>
<li>General property list operations </li>
<li>Generic property list functions</li>
</ul>
<p>The general property functions can be used with any property list; the generic property functions constitute an advanced feature.</p>
<p>The in-memory file image feature of HDF5 uses property lists in a manner that differs substantially from their use elsewhere in HDF5. Those who plan to use in-memory file images must study "File Image Operations" (PDF) in the Advanced Topics in HDF5collection.</p>
<h2><a class="anchor" id="subsec_plist_notes"></a>
Notes</h2>
<p><a class="anchor" id="FileMountProps"></a></p><h4>File Mount Properties</h4>
<p>While the file mount property list class <a class="el" href="_h5_ppublic_8h.html#a3f57eb3c4081b40ff8b036f438e68e5b">H5P_FILE_MOUNT</a> is a valid HDF5 property list class, no file mount properties are defined by the HDF5 Library. References to a file mount property list should always be expressed as <a class="el" href="_h5_ppublic_8h.html#afa85e97bfbf9bf1c58e39263846c568f">H5P_DEFAULT</a>, meaning the default file mount property list.</p>
<h4>Access and Creation Property Exceptions</h4>
<p>There are a small number of exceptions to the rule that creation properties are always retained in a file or object and access properties are never retained.</p>
<p>The following properties are file access properties but they are not transient; they have permanent and different effects on a file. They could be validly classified as file creation properties as they must be set at creation time to properly create the file. But they are access properties because they must also be set when a file is reopened to properly access the file. </p><table class="doxtable">
<tr>
<th>Property</th><th>Related function </th></tr>
<tr valign="top">
<td>Family file driver  </td><td><a class="el" href="group___f_a_p_l.html#ga95d19da25f196ce1ace10af00f49ab53">H5Pset_fapl_family</a>   </td></tr>
<tr valign="top">
<td>Split file driver  </td><td><a class="el" href="group___f_a_p_l.html#ga502f1ad38f5143cf281df8282fef26ed">H5Pset_fapl_split</a>   </td></tr>
<tr valign="top">
<td>Core file driver  </td><td><a class="el" href="group___f_a_p_l.html#ga6e6628f620a1c58c704129cf07282849">H5Pset_fapl_core</a>   </td></tr>
</table>
<p>The following is a link creation property, but it is not relevant after an object has been created and is not retained in the file or object. </p><table class="doxtable">
<tr>
<th>Property</th><th>Related function </th></tr>
<tr valign="top">
<td>Create missing intermediate groups  </td><td><a class="el" href="group___l_c_p_l.html#ga66c4c5d3f34e5cf65d00e47a5387383c">H5Pset_create_intermediate_group</a>   </td></tr>
</table>
<p>Previous Chapter <a class="el" href="_h5_e__u_g.html#sec_error">HDF5 Error Handling</a> - Next Chapter <a class="el" href="_h5_v_l__u_g.html#sec_vol">The HDF5 Virtual Object Layer (VOL)</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>