ibm-information-center/dist/eclipse/plugins/i5OS.ic.apis_5.4.0.1/qgetattr.htm

3629 lines
118 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
<title>Qp0lGetAttr()--Get Attributes</title>
<!-- Begin Header Records ========================================== -->
<!-- **************************************************************** -->
<!-- ** WARNING *** READ ME WHENEVER YOU MAKE CHANGES *** WARNING ** -->
<!-- **************************************************************** -->
<!-- 1)If you make any changes to add the getting of new attributes -->
<!-- to this API, please contact Mike Mundy of XPF P0W so that he -->
<!-- can make similar changes to his 'attr' Qshell utility. -->
<!-- 2)Also, you need to consider if these changes should also be -->
<!-- made to the data retrieved using PRTDIRINF/RTVDIRINF (XPF EZ) -->
<!-- **************************************************************** -->
<!-- ** WARNING *** READ ME WHENEVER YOU MAKE CHANGES *** WARNING ** -->
<!-- **************************************************************** -->
<!-- Unix2 SCRIPT J converted by B2H R4.1 (346) (CMS) by V2KEA304 -->
<!-- at RCHVMW2 on 17 Feb 1999 at 11:05:09 -->
<!-- Change log: -->
<!-- 010402 Jkugel: Added new value to QP0L_ATTR_SIGNED -->
<!-- 010402 JTROUS: Modify to return S_ISGID, S_ISUID V5R2, 98686 -->
<!-- 010424 JTROUS: Added new value to QP0L_DIR_FORMAT,98761,v5r2a -->
<!-- 010430 JTROUS Creation Date, 98807, 2x Memory, V5R2b -->
<!-- 010619 JKUGEL: New attribute QP0L_ATTR_SYS_SIGNED. D98749 -->
<!-- 011022 JTROUS Changes from API Review 1, V5R2 -->
<!-- 011130 JTROUS Changes for DCR 99093, Return Audit Info, v5r2c -->
<!-- 020131 JTROUS Changes from API Review 3, V5R2 -->
<!-- 020306 This file has undergone html cleanup on 3/06/02 by JET -->
<!-- 020307 JTROUS Changes for Virus scanner, 98860, V5R3 -->
<!-- 020407 JTROUS Changes for non-savable, 99365, V5R3a -->
<!-- 020618 EMIG: updated for NFS threadsafety, V5R3 -->
<!-- 020718 MFENLON: updated for QFileSvr.400 threadsafety, V5R3 -->
<!-- 020829 RTHEIS : S_ISVTX mode bit, V5R3 -->
<!-- 021015 JETAYLOR: Fixed link to QsrSave.htm -->
<!-- 021107 JTROUS Add desc to blksize,allocsize,doc 8 bytes align V5R3a -->
<!-- 021126 FAIMAN: Fix of type 1 vs type 2 STMF differences. V5R3c -->
<!-- 021211 JTROUS Fix error in Journal_SUBTREE -->
<!-- 021227 Rosckes: Support for new journal information -->
<!-- 030206 JTROUS : Fix from DCG review of Ragged SWA work -->
<!-- 030429 JTROUS : Fixes from Mike Mundy comments -->
<!-- 030520 JTROUS : Updates to non-savable description -->
<!-- 031016 JTROUS : Updates to *TYPE2 STMF descriptions, v5r3 -->
<!-- 031118 JTROUS : Update offset for QP0L_ATTR_AUTH, v5r3, format -->
<!-- 031201 JTROUS : Add Create Object Auditing, Misc changes V5R4 -->
<!-- 040106 JTROUS : Add *NOTAVL to auditing values, V5R4a -->
<!-- 040324 TIMCLARK: Add QP0L_ATTR_SYSTEM_USE, v5r4 -->
<!-- 040827 JTROUS : Add NFS not on AUDIT value always *NON, v5r4 -->
<!-- 050117 JTROUS : Errno updates (not change flagged) -->
<!-- 050119 JTROUS Fix wording on scanning pendconv restriction, V5r4 -->
<!-- 050322 JTROUS Fix wording on *TYPE2 file, disk storage, not main,-->
<!-- not change flagged,V5r4 -->
<!-- 050415 JTROUS V5R4 Review 1 changes, no change flags -->
<!-- 050815 JTROUS Fix *TYPE1 file format size limit, V5R4 -->
<!-- 050831 JTROUS Add to MAINSTGOPT extra details, V5R4 -->
<!-- **************************************************************** -->
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<!-- End Header Records -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<a name="top_Of_Page"></a>
<!-- Java sync-link -->
<script language="Javascript" src="../rzahg/synch.js" type="text/javascript">
</script>
<h2>Qp0lGetAttr()--Get Attributes</h2>
<div class="box" style="width: 80%;">
<br>
&nbsp;&nbsp;Syntax<br>
<pre>
#include &lt;Qp0lstdi.h&gt;
int Qp0lGetAttr
(Qlg_Path_Name_T *<em>Path_Name</em>,
Qp0l_AttrTypes_List_t *<em>Attr_Array_ptr</em>,
char *<em>Buffer_ptr</em>,
uint <em>Buffer_Size_Provided</em>,
uint *<em>Buffer_Size_Needed_ptr</em>,
uint *<em>Num_Bytes_Returned_ptr</em>,
uint <em>Follow_Symlnk, ...</em>);
</pre>
<br>
&nbsp;&nbsp;Service Program Name: QP0LLIB2<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: Conditional; see <a href="#usage_notes">Usage Notes</a>.<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The <strong>Qp0lGetAttr()</strong> function gets one or more attributes, on
a single call, for the object that is referred to by the input <em>
Path_Name</em>. The object must exist, the user must have authority to it, and
the requested attributes must be supported by the specific file system
or object type.
For each requested attribute that is not supported by the file system
or object type, <strong>
Qp0lGetAttr()</strong> returns zero in the Size of attribute data field,
pointed to by the <em>Buffer_ptr</em> parameter, for that attribute.</p>
<p><strong>Qp0lGetAttr()</strong> either returns the attributes of the symbolic
link, or returns the attributes of the object that the symbolic link names.
This depends upon the value of the <em>Follow_Symlnk</em> parameter.</p>
<p><strong>Qp0lGetAttr()</strong> returns all times in seconds since the Epoch
so that they are consistent with UNIX-type APIs. The Epoch is the time 0 hours,
0 minutes, 0 seconds, January 1, 1970, Coordinated Universal Time. If the
i5/OS date is set prior to 1970, all time values are zero.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong><em>Path_Name</em></strong></dt>
<dd>(Input) The path name of the object for which attribute information is
returned. This path name is in the Qlg_Path_Name_T format. For more information
on this structure, see <a href="../apiref/pns.htm">Path name format</a>.<br>
<br>
</dd>
<dt><strong><em><a name="attr_array_ptr">Attr_Array_ptr</a></em></strong></dt>
<dd>(Input) A pointer to a structure listing the requested attributes returned
for the object identified by the <em>Path_Name</em> parameter. Each entry in
the array identifies an attribute, by a constant value, that <strong>
Qp0lGetAttr()</strong> returns. The number of requested attributes field must
equal the total number of constants. If the <strong>Attr_Array_ptr</strong> is
NULL or if the Number of requested attributes field is zero, <strong>
Qp0lGetAttr()</strong> returns all the attributes that the API supports that
are available for the object. The format of this parameter follows.<br>
<br>
<table border width="80%">
<tr>
<th align="left" valign="bottom" colspan="4"><em><a name="Table_1-1">Attribute
array pointer</a></em></th>
</tr>
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Number of requested attributes</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">ARRAY(*) of BINARY(4)</td>
<td align="left" valign="top">Array of attribute constants</td>
</tr>
</table>
<p><strong>Array of attribute constants.</strong> A list of predefined
constants, each identifying a requested attribute. <strong>
Qp0lGetattr()</strong> also returns one of these constants in the Attribute
identification field, pointed to by the <em>Buffer_ptr</em> parameter. The
constant must be used to identify the returned attribute because the attributes
are returned in any order. Note that the Size of attribute data field, pointed
to by the <em>Buffer_ptr</em> parameter, contains the total size of data that
<strong>Qp0lGetattr()</strong> returns for the constants in this array. Valid
values, and sizes of the returned attributes, follow:</p>
<dl>
<dt><em>0</em></dt>
<dd>QP0L_ATTR_OBJTYPE: (CHAR(10)) The object type.
See <a href="../rbam6/rbam6clmain.htm">Control Language (CL)</a> information in
the iSeries Information center for descriptions of all iSeries object
types.<br><br></dd>
<dt><em>1</em></dt>
<dd>QP0L_ATTR_DATA_SIZE: (UNSIGNED BINARY(4)) The
size in bytes of the data in this object.
The size varies by object type and file system.
This size does not include object
headers or the size of extended attributes associated with the object. If this
attribute is requested and the size cannot be represented in a BINARY(4) data
type, <strong>Qp0lGetAttr()</strong> fails with <em>errno</em> [EOVERFLOW].
Refer to QP0L_ATTR_DATA_SIZE_64 for objects whose data sizes are greater than
BINARY(4).<br><br></dd>
<dt><em>2</em></dt>
<dd>QP0L_ATTR_ALLOC_SIZE: (UNSIGNED BINARY(4)) The
number of bytes that have been allocated for this object.
The allocated size varies by object type and file system. For example, the
allocated size includes the object data size as shown in QP0L_ATTR_DATA_SIZE
or QP0L_ATTR_DATA_SIZE_64 as well as any
logically sized extents to accommodate anticipated future requirements for
the object data. It may or may not include additional bytes for attribute
information.
If this size cannot
be represented in a BINARY(4) data type, <strong>Qp0lGetAttr()</strong> fails
with <em>errno</em> [EOVERFLOW]. Refer to QP0L_ATTR_ALLOC_SIZE_64 for objects
whose allocated sizes are greater than BINARY(4).<br><br></dd>
<dt><em>3</em></dt>
<dd>QP0L_ATTR_EXTENDED_ATTR_SIZE: (UNSIGNED
BINARY(4)) The total number of extended attribute bytes.<br><br></dd>
<dt><em>4</em></dt>
<dd>QP0L_ATTR_CREATE_TIME: (UNSIGNED BINARY(4)) The
time the object was created.<br><br></dd>
<dt><em>5</em></dt>
<dd>QP0L_ATTR_ACCESS_TIME: (UNSIGNED BINARY(4)) The
time that the object's data was last accessed.<br><br></dd>
<dt><em>6</em></dt>
<dd>QP0L_ATTR_CHANGE_TIME: (UNSIGNED BINARY(4)) The
time that the object's data or attributes were last changed.<br><br></dd>
<dt><em>7</em></dt>
<dd>QP0L_ATTR_MODIFY_TIME: (UNSIGNED BINARY(4)) The
time that the object's data was last changed.<br><br></dd>
<dt><em>8</em></dt>
<dd>QP0L_ATTR_STG_FREE: (CHAR(1)) Whether the
object's data has been moved offline, freeing its online storage. Valid values
are:
<br>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SYS_NOT_STG_FREE: The object's data is not
offline.</td>
</tr>
<tr>
<td align="left" valign="top" width="10%"><em>x'01'</em></td>
<td align="left" valign="top" width="90%">QP0L_SYS_STG_FREE: The object's data is
offline.</td>
</tr>
</table><br><br></dd>
<dt><em>9</em></dt>
<dd>QP0L_ATTR_CHECKED_OUT: Whether an object is
checked out or not. When an object is checked out, other users can read and
copy the object. Only the user who has the object checked out can change the
object. The checkout format is defined in the Qp0lstdi.h header file as data
type Qp0l_Checkout_t, and is described in the following table.<br>
<table border width="80%">
<tr>
<th align="left" valign="bottom" colspan="4"><em><a name="Table_1-2">Checkout
Format</a></em></th>
</tr>
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">CHAR(1)</td>
<td align="left" valign="top" width="60%">Flag indicating whether an object is
checked out</td>
</tr>
<tr>
<td align="center" valign="top">1</td>
<td align="center" valign="top">1</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">User to whom checked out</td>
</tr>
<tr>
<td align="center" valign="top">11</td>
<td align="center" valign="top">B</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="center" valign="top">C</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Time checked out</td>
</tr>
</table>
<p><strong>Flag.</strong> An indicator as to whether an object is checked out.
Valid values are:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_NOT_CHECKED_OUT: The object is not checked
out.</td>
</tr>
<tr>
<td align="left" valign="top" width="10%"><em>x'01'</em></td>
<td align="left" valign="top" width="90%">QP0L_CHECKED_OUT: The object is checked out.</td>
</tr>
</table>
<p><strong>Reserved.</strong> A reserved field. This field must be set to
binary zero.</p>
<p><strong>Time checked out.</strong> The time the object was checked out. This
field represents the number of seconds since the Epoch.</p>
<p><strong>User to whom checked out.</strong> The user who has the object
checked out. This field is blank if it is not checked out.</p></dd>
<dt><em>10</em></dt>
<dd>QP0L_ATTR_LOCAL_REMOTE: (CHAR(1)) Whether an
object is stored locally or stored on a remote system. The decision of whether
a file is local or remote varies according to the respective file system rules.
Objects in file systems that do not carry either a local or remote indicator
are treated as remote. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'01'</em></td>
<td align="left" valign="top" width="90%">QP0L_LOCAL_OBJ: The object's data is stored
locally.</td>
</tr>
<tr>
<td align="left" valign="top" width="10%"><em>x'02'</em></td>
<td align="left" valign="top" width="90%">QP0L_REMOTE_OBJ: The object's data is on a remote
system.</td>
</tr>
</table><br><br></dd>
<dt><em>11</em></dt>
<dd>QP0L_ATTR_AUTH: The public and private
authorities associated with the object.
<p>When the QP0L_ATTR_AUTH attribute is requested, the attribute data is
returned in the buffer in the following format. This format is defined in
header file Qp0lstdi.h as data type Qp0l_Authority_General_t.</p>
<table border width="80%">
<tr>
<th align="left" valign="bottom" colspan="4"><em><a name="Table_1-3">General
Authority Format</a></em></th>
</tr>
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">CHAR(10)</td>
<td align="left" valign="top" width="60%">Object owner</td>
</tr>
<tr>
<td align="center" valign="top">10</td>
<td align="center" valign="top">0A</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Primary group</td>
</tr>
<tr>
<td align="center" valign="top">20</td>
<td align="center" valign="top">14</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Authorization list name</td>
</tr>
<tr>
<td align="center" valign="top">30</td>
<td align="center" valign="top">1E</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">40</td>
<td align="center" valign="top">28</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Offset to array of users</td>
</tr>
<tr>
<td align="center" valign="top">44</td>
<td align="center" valign="top">2C</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Number of users</td>
</tr>
<tr>
<td align="center" valign="top">48</td>
<td align="center" valign="top">30</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Size of user entry field entry</td>
</tr>
<tr>
<td align="center" valign="top">52</td>
<td align="center" valign="top">34</td>
<td align="left" valign="top">CHAR(12)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">&nbsp;</td>
<td align="center" valign="top">&nbsp;</td>
<td align="left" valign="top">ARRAY(*)</td>
<td align="left" valign="top">Array of users</td>
</tr>
</table>
<p><strong>Array of users.</strong> The names and authorities of the users who
are authorized to use the object.</p>
<p><strong>Authorization list name.</strong> The name of the authorization list
that is used to secure the named object. The value *NONE indicates that no
authorization list is used in determining authority to the object.</p>
<p><strong>Number of users.</strong> The number of users that are authorized to
the object. This is the number of users returned in the array of users.</p>
<p>The QFileSvr.400 file system returns zero for the Number of users and zero
for the Offset to array of users. If a primary group is specified, the Network
File System (NFS) returns one for the Number of users.</p>
<p><strong>Object owner.</strong> The name of the user profile that is the
owner of the object or the following special value:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*NOUSRPRF</em></td>
<td align="left" valign="top">This special value is used by the Network File
System to indicate that there is no user profile on the local iSeries server
with a user ID (UID) matching the UID of the remote object.</td>
</tr>
</table>
<p><strong>Offset to array of users.</strong> The offset to the names and
authorities of the users who are authorized to use the object. This offset is
relative to the
start of
the buffer
pointed to by the <em>Buffer_ptr</em> parameter.</p>
<p><strong>Primary group.</strong> The name of the user profile that is the
primary group of the object or the following special values:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*NONE</em></td>
<td align="left" valign="top">The object does not have a primary group.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*NOUSRPRF</em></td>
<td align="left" valign="top">This special value is used by the Network File
System to indicate that there is no user profile on the local server with a
group ID (GID) matching the GID of the remote object.</td>
</tr>
</table>
<p><strong>Reserved.</strong> A reserved field. This field must be set to
binary zero.</p>
<p><strong>Size of user entry field entry.</strong> The number of bytes
returned for each user.</p>
<p>When the QP0L_ATTR_AUTH attribute is requested, the array of users is
returned in the buffer in the following format. This format is defined in
header file Qp0lstdi.h as data type Qp0l_Authority_Users_t.</p>
<table border width="80%">
<tr>
<th align="left" valign="bottom" colspan="4"><em><a name="Table_1-4">Data and
Object Authority Format</a></em></th>
</tr>
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">CHAR(10)</td>
<td align="left" valign="top" width="60%">User name</td>
</tr>
<tr>
<td align="center" valign="top">10</td>
<td align="center" valign="top">0A</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">User data authority</td>
</tr>
<tr>
<td align="left" valign="top" colspan="4">Object rights</td>
</tr>
<tr>
<td align="center" valign="top">20</td>
<td align="center" valign="top">14</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Object management</td>
</tr>
<tr>
<td align="center" valign="top">21</td>
<td align="center" valign="top">15</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Object existence</td>
</tr>
<tr>
<td align="center" valign="top">22</td>
<td align="center" valign="top">16</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Object alter</td>
</tr>
<tr>
<td align="center" valign="top">23</td>
<td align="center" valign="top">17</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Object reference</td>
</tr>
<tr>
<td align="center" valign="top">24</td>
<td align="center" valign="top">18</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="left" valign="top" colspan="4">Data rights</td>
</tr>
<tr>
<td align="center" valign="top">34</td>
<td align="center" valign="top">22</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Object operational</td>
</tr>
<tr>
<td align="center" valign="top">35</td>
<td align="center" valign="top">23</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Read</td>
</tr>
<tr>
<td align="center" valign="top">36</td>
<td align="center" valign="top">24</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Add</td>
</tr>
<tr>
<td align="center" valign="top">37</td>
<td align="center" valign="top">25</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Update</td>
</tr>
<tr>
<td align="center" valign="top">38</td>
<td align="center" valign="top">26</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Delete</td>
</tr>
<tr>
<td align="center" valign="top">39</td>
<td align="center" valign="top">27</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Execute</td>
</tr>
<tr>
<td align="center" valign="top">40</td>
<td align="center" valign="top">28</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Exclude</td>
</tr>
<tr>
<td align="center" valign="top">41</td>
<td align="center" valign="top">29</td>
<td align="left" valign="top">CHAR(7)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<p><strong>Add (*ADD).</strong> Authority to add entries to the object. Valid
values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have add data rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have add data rights.</td>
</tr>
</table>
<p><strong>Delete (*DELETE).</strong> Authority to remove entries from the
object. Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have delete data rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have delete data rights.</td>
</tr>
</table>
<p><strong>Execute (*EXECUTE).</strong> Authority to run a program or search a
library or directory. Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have execute data rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have execute data rights.</td>
</tr>
</table>
<p><strong>Exclude (*EXCLUDE).</strong> The user is prevented from accessing
the object. Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have exclude data rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have exclude data rights.</td>
</tr>
</table>
<p><strong>Object alter (*OBJALTER).</strong> Authority to change the
attributes of an object, such as adding or removing triggers for a database
file. Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have alter object rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have alter object rights.</td>
</tr>
</table>
<p><strong>Object existence (*OBJEXIST).</strong> Authority to control the
object's existence and ownership. Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have object existence
rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have object existence rights.</td>
</tr>
</table>
<p><strong>Object management (*OBJMGT).</strong> Authority to specify security,
to move or rename the object, and to add members if the object is a database
file. Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have object management
rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have object management rights.</td>
</tr>
</table>
<p><strong>Object operational (*OBJOPR).</strong> Authority to look at the
object's attributes and to use the object as specified by the data authorities
that the user has to the object. Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have object operational
rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have object operational
rights.</td>
</tr>
</table>
<p><strong>Object reference (*OBJREF).</strong> Authority to specify the object
as the first level in a referential constraint. Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have object reference
rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have object reference rights.</td>
</tr>
</table>
<p><strong>Read (*READ).</strong> Authority to access the contents of the
object. Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have read data rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have read data rights.</td>
</tr>
</table>
<p><strong>Reserved.</strong> A reserved field. This field must be set to
binary zero.</p>
<p><strong>Update (*UPDATE).</strong> Authority to change the content of
existing entries in the object. Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The user does not have update data rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The user does have update data rights.</td>
</tr>
</table>
<p><strong>User data authority.</strong> The operation, use, or access that the
user has to an object. Valid values follow:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*RWX</em></td>
<td align="left" valign="top">Allows all operations on the object except those
that are limited to the owner or controlled by the object rights.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*RW</em></td>
<td align="left" valign="top">Allows access to the object attributes and allows
the object to be changed. The user cannot use the object.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*WX</em></td>
<td align="left" valign="top">Allows use of the object and allows the object to
be changed. The user cannot access the object attributes.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*R</em></td>
<td align="left" valign="top">Allows access to the object attributes.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*W</em></td>
<td align="left" valign="top">Allows the object to be changed.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*X</em></td>
<td align="left" valign="top">Allows the use of the object.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*EXCLUDE</em></td>
<td align="left" valign="top">All operations on the object are prohibited.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*NONE</em></td>
<td align="left" valign="top">Displayed by the system when the user does not
have any data authorities.</td>
</tr>
<tr>
<td align="left" valign="top"><em>USER DEF</em></td>
<td align="left" valign="top">Displayed by the system when the specific data
authorities do not match any of the predefined data authority levels
above.</td>
</tr>
</table>
<p><strong>User name.</strong> The name of a user authorized to use the object.
This may be the name of the user profile or one of the following special
values:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*NOUSRPRF</em></td>
<td align="left" valign="top">The authorities of either the owner or the
primary group of the object for which the profile name could not be determined.
This value is used by the Network File System only. It indicates that the user
ID (UID) or the group ID (GID) for the remote object does not match any profile
on the local iSeries server with that UID or GID.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*NTWIRF</em></td>
<td align="left" valign="top">The authorities of the NetWare Inherited Rights
Filter for the object. This value is only used by the QNetWare file
system.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*NTWEFF</em></td>
<td align="left" valign="top">The NetWare effective rights to the object. This
value is only used by the QNetWare file system.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*PUBLIC</em></td>
<td align="left" valign="top">The authorities of users who are not specifically
named and who are not in the object's authorization list.</td>
</tr>
</table><br><br></dd>
<dt><em>12</em></dt>
<dd>QP0L_ATTR_FILE_ID: (CHAR(16)) An identifier
associated with the referred to object. A file ID can be used with <a href=
"getpthff.htm">Qp0lGetPathFromFileID()</a> to retrieve an object's path name.
The file ID is defined in header file Qp0lstdi.h as data type Qp0lFID_t.</dd>
<dt><em>13</em></dt>
<dd>QP0L_ATTR_ASP: (BINARY(2)) The auxiliary storage
pool in which the object is stored.<br><br></dd>
<dt><em>14</em></dt>
<dd>QP0L_ATTR_DATA_SIZE_64: (UNSIGNED BINARY(8)) The
size in bytes of the data in this object.
The size varies by object type and file system.
This size does not include object
headers or the size of extended attributes associated with the object.
QP0L_ATTR_DATA_SIZE may be used for objects whose data size can be represented
in a BINARY(4) data type.</dd>
<dt><em>15</em></dt>
<dd>QP0L_ATTR_ALLOC_SIZE_64: (UNSIGNED BINARY(8)) The
number of bytes that have been allocated for this object.
The allocated size varies by object type and file system. For example, the
allocated size includes the object data size as shown in QP0L_ATTR_DATA_SIZE
or QP0L_ATTR_DATA_SIZE_64 as well as any
logically sized extents to accommodate anticipated future requirements for
the object data. It may or may not include additional bytes for attribute
information.
QP0L_ATTR_ALLOC_SIZE
may be used for objects whose allocated size can be represented in a BINARY(4)
data type.</dd>
<dt><em>16</em></dt>
<dd>QP0L_ATTR_USAGE_INFORMATION: Fields indicating
how often an object is used. Usage has different meanings according to the
specific file system and according to the individual object types supported
within a file system. Usage can indicate the opening or closing of a file or
can refer to adding links, renaming, restoring, or checking out an object. The
usage information format is defined in the Qp0lstdi.h header file as data type
Qp0l_Usage_t and is shown in the following table.<br>
<br>
<table border width="80%">
<tr>
<th align="left" valign="bottom" colspan="4"><em><a name="Table_1-5">
Qp0l_Usage_t</a></em></th>
</tr>
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Reset date</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Last used date</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Days used count</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="center" valign="top">C</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<p><strong>Days used count.</strong> The number of days an object has been
used. Usage has different meanings according to the specific file system and
according to the individual object types supported within a file system. Usage
can indicate the opening or closing of a file or can refer to adding links,
renaming, restoring, or checking out an object. This count is incremented once
each day that an object is used and is reset to zero by calling the <strong>
Qp0lSetAttr()</strong> API.</p>
<p><strong>Last used date.</strong> The number of seconds since the Epoch that
corresponds to the date the object was last used. This field is zero when the
object is created. If usage data is not maintained for the i5/OS type or the
file system to which an object belongs, this field is zero.</p>
<p><strong>Reserved.</strong> A reserved field set to binary zeros.</p>
<p><strong>Reset date.</strong> The number of seconds since the Epoch that
corresponds to the date the days used count was last reset to zero (0). This
date is set to the current date when the <strong>Qp0lSetAttr()</strong> API is
called to reset the Days used count to zero.</p>
<br><br></dd>
<dt><em>17</em></dt>
<dd>QP0L_ATTR_PC_READ_ONLY: (CHAR(1)) Whether the
object can be written to or deleted, have its extended attributes changed or
deleted, or have its size changed. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_PC_NOT_READONLY: The object can be
changed.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_PC_READONLY: The object cannot be
changed.</td>
</tr>
</table>
<br><br></dd>
<dt><em>18</em></dt>
<dd>QP0L_ATTR_PC_HIDDEN: (CHAR(1)) Whether the object
can be displayed using an ordinary directory listing.
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_PC_NOT_HIDDEN: The object is not
hidden.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_PC_HIDDEN: The object is hidden.</td>
</tr>
</table><br><br></dd>
<dt><em>19</em></dt>
<dd>QP0L_ATTR_PC_SYSTEM: (CHAR(1)) Whether the object
is a system file and is excluded from normal directory searches.
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_PC_NOT_SYSTEM: The object is not a system
file.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_PC_SYSTEM: The object is a system file.</td>
</tr>
</table><br><br></dd>
<dt><em>20</em></dt>
<dd>QP0L_ATTR_PC_ARCHIVE: (CHAR(1)) Whether the
object has changed since the last time the file was examined.
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_PC_NOT_CHANGED: The object has not
changed.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_PC_CHANGED: The object has changed.</td>
</tr>
</table><br><br></dd>
<dt><em>21</em></dt>
<dd>QP0L_ATTR_SYSTEM_ARCHIVE: (CHAR(1)) Whether the
object has changed and needs to be saved. It is set on when an object's change
time is updated, and set off when the object has been saved.
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SYSTEM_NOT_CHANGED: The object has not
changed and does not need to be saved.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SYSTEM_CHANGED: The object has changed and
does need to be saved.</td>
</tr>
</table><br><br></dd>
<dt><em>22</em></dt>
<dd>QP0L_ATTR_CODEPAGE: (BINARY(4)) The code page
derived from the coded character set identifier (CCSID) used for the data in
the file or the extended attributes of the directory. If the returned value of
this field is zero (0), there is more than one code page associated with the
st_ccsid. If the st_ccsid is not a supported system CCSID, the st_codepage is
set equal to the st_ccsid.<br><br></dd>
<dt><em>23</em></dt>
<dd>QP0L_ATTR_FILE_FORMAT: (CHAR(1)) The format of
the stream file (*STMF). Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_FILE_FORMAT_TYPE1: The object has the same
format as *STMF objects created on releases prior to Version 4 Release 4.
It has a minimum object
size of 4096 bytes and a maximum object size of approximately
<img src="delta.gif" alt="Start of change">
128
<img src="deltaend.gif" alt="End of change">
gigabytes.
</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_FILE_FORMAT_TYPE2:
A QP0L_FILE_FORMAT_TYPE2 (*TYPE2) *STMF has high
performance file access and was new in Version 4 Release 4 of i5/OS (OS/400).
It has a minimum object size of 4096 bytes and a maximum object size of
approximately one terabyte in the "root" (/), QOpenSys and user-defined
file systems. Otherwise, the maximum is approximately 256 gigabytes.
A *TYPE2 *STMF is capable of memory mapping as well as the ability
to specify an attribute to optimize disk storage allocation.
</td>
</tr>
</table><br><br></dd>
<dt><em>24</em></dt>
<dd>QP0L_ATTR_UDFS_DEFAULT_FORMAT: (CHAR(1)) The
default file format of stream files (*STMF) created in the user-defined file
system. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_UDFS_DEFAULT_TYPE1: The stream file (*STMF)
has the same format as *STMFs created on releases prior to Version 4 Release 4
of i5/OS (OS/400). It has a minimum object
size of 4096 bytes and a maximum object size of approximately 256 gigabytes.
</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_UDFS_DEFAULT_TYPE2:
A *TYPE2 *STMF has high
performance file access and was new in Version 4 Release 4 of i5/OS (OS/400).
It has a minimum object size of 4096 bytes and a maximum object size of
approximately one terabyte in the "root" (/), QOpenSys and user-defined
file systems. Otherwise, the maximum is approximately 256 gigabytes.
A *TYPE2 *STMF is capable of memory mapping as well as the ability
to specify an attribute to optimize disk storage allocation.
</td>
</tr>
</table><br><br></dd>
<dt><em>25</em></dt>
<dd>QP0L_ATTR_JOURNAL_INFORMATION: Basic Journaling
information for this object. The journaling information format is defined in
the Qp0lstdi.h header file as data type Qp0l_Journal_Info_t and is shown in the
following table:<br>
<br>
<table border width="80%">
<tr>
<th align="left" valign="bottom" colspan="4"><em><a name="Table_1-6">
Qp0l_Journal_Info_t</a></em></th>
</tr>
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">CHAR(1)</td>
<td align="left" valign="top" width="60%">Journaling status</td>
</tr>
<tr>
<td align="center" valign="top">1</td>
<td align="center" valign="top">1</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Options</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="center" valign="top">2</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Journal identifier (JID)</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="center" valign="top">0C</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Current or last journal name</td>
</tr>
<tr>
<td align="center" valign="top">22</td>
<td align="center" valign="top">16</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Current or last journal library name</td>
</tr>
<tr>
<td align="center" valign="top">32</td>
<td align="center" valign="top">20</td>
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
<td align="left" valign="top">Last journaling start time</td>
</tr>
</table>
<p>
For extended journaling information see QP0L_ATTR_JOURNAL_EXTENDED_INFORMATION.
</p>
<p><strong>Current or last journal library name.</strong> If the value of the
journaling status is QP0L_JOURNALED, then this field contains the name of the
library containing the currently used journal. If the value of the journaling
status is QP0L_NOT_JOURNALED, then this field contains the name of the library
containing the last used journal. All bytes in this field will be set to binary
zero if this object has never been journaled.</p>
<p><strong>Current or last journal name.</strong> If the value of the
journaling status is QP0L_JOURNALED, then this field contains the name of the
journal currently being used. If the value of the journaling status is
QP0L_NOT_JOURNALED, then this field contains the name of the journal last used
for this object. All bytes in this field will be set to binary zero if this
object has never been journaled.</p>
<p><strong>Journal identifier (JID).</strong> This field associates the object
being journaled with an identifier that can be used on various
journaling-related commands and APIs. </p>
<p><strong>Journaling status.</strong> Current journaling status of the object.
This field will be one of the following values:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_NOT_JOURNALED: The object is currently not
being journaled.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_JOURNALED: The object is currently being
journaled.</td>
</tr>
</table>
<p><strong>Last journaling start time.</strong> The number of seconds since the
Epoch that corresponds to the last date and time for which the object had
journaling started for it. This field will be set to binary zero if this object
has never been journaled.</p>
<p><strong>Options.</strong> This field describes the current journaling
options. This field is composed of several bit flags and contains one or more
of the following bit values:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'80'</em></td>
<td align="left" valign="top" width="90%">QP0L_JOURNAL_SUBTREE: When this flag is returned,
this object is a directory with IFS journaling subtree semantics. New objects
created within this directory's subtree will inherit the journaling attributes
and options from this directory.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'08'</em></td>
<td align="left" valign="top">QP0L_JOURNAL_OPTIONAL_ENTRIES: When journaling is
active, entries that are considered optional are journaled. The list of
optional journal entries varies for each object type. See the
<a href="../ifs/rzaaxkickoff.htm">Integrated file system</a> information
in the Files and file systems topic
for information regarding these optional entries for various objects.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'20'</em></td>
<td align="left" valign="top">QP0L_JOURNAL_AFTER_IMAGES: When journaling is
active, the image of the object after a change is journaled.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'40'</em></td>
<td align="left" valign="top">QP0L_JOURNAL_BEFORE_IMAGES: When journaling is
active, the image of the object prior to a change is journaled.</td>
</tr>
</table><br><br></dd>
<dt><em>26</em></dt>
<dd>QP0L_ATTR_ALWCKPWRT: (CHAR(1)) Whether a stream
file (*STMF) can be shared with readers and writers during the
save-while-active checkpoint processing. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_NOT_ALWCKPWRT: The object can be shared with
readers only.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_ALWCKPWRT: The object can be shared with
readers and writers.</td>
</tr>
</table><br><br></dd>
<dt><em>27</em></dt>
<dd>QP0L_ATTR_CCSID: (BINARY(4)) The CCSID of the
data and extended attributes of the object.<br><br></dd>
<dt><em>28</em></dt>
<dd>QP0L_ATTR_SIGNED: (CHAR(1)) Whether an object has
an i5/OS digital signature. This attribute is only returned for *STMF objects.
Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_NOT_SIGNED: The object does not have an
i5/OS digital signature.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SIGNED: The object does have an i5/OS
digital signature.</td>
</tr>
</table><br><br></dd>
<dt><em>29</em></dt>
<dd>QP0L_ATTR_SYS_SIGNED: (CHAR(1)) Whether the
object was signed by a source that is trusted by the system. This attribute is
only returned for *STMF objects. Note: this attribute is not returned if the
QP0L_ATTR_SIGNED attribute has the value QP0L_NOT_SIGNED. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SYSTEM_SIGNED_NO: (CHAR(1)) None of the
signatures came from a source that is trusted by the system.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SYSTEM_SIGNED_YES: The object was signed by
a source that is trusted by the system. If the object has multiple signatures,
at least one of the signatures came from a source that is trusted by the
system.</td>
</tr>
</table><br><br></dd>
<dt><em>30</em></dt>
<dd>QP0L_ATTR_MULT_SIGS: (CHAR(1)) Whether an object
has more than one i5/OS digital signature. This attribute is only returned for
*STMF objects. Note: this attribute is not returned if the QP0L_ATTR_SIGNED
attribute has the value QP0L_NOT_SIGNED. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_MULT_SIGS_NO: The object has only one
digital signature.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_MULT_SIGS_YES: The object has more than one
digital signature. If the QP0L_ATTR_SYS_SIGNED attribute has the value
QP0L_SYS_SIGNED, at least one of the signatures is from a source trusted by the
system.</td>
</tr>
</table><br><br></dd>
<dt><em>31</em></dt>
<dd>QP0L_ATTR_DISK_STG_OPT (CHAR(1)) This option
should be used to determine how auxiliary storage is allocated by the system
for the specified object. This option can only be specified for stream files in
the "root" (/), QOpenSys and user-defined file systems. This option will be
ignored for *TYPE1 byte stream files. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_STG_NORMAL: The auxiliary storage will be
allocated normally. That is, as additional auxiliary storage is required, it
will be allocated in logically sized extents to accommodate the current space
requirement, and anticipated future requirements, while minimizing the number
of disk I/O operations.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_STG_MINIMIZE: The auxiliary storage will be
allocated to minimize the space used by the object. That is, as additional
auxiliary storage is required, it will be allocated in small sized extents to
accommodate the current space requirement. Accessing an object composed of many
small extents may increase the number of disk I/O operations for that
object.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'02'</em></td>
<td align="left" valign="top">QP0L_STG_DYNAMIC: The system will dynamically
determine the optimum auxiliary storage allocation for the object, balancing
space used versus disk I/O operations. For example, if a file has many small
extents, yet is frequently being read and written, then future auxiliary
storage allocations will be larger extents to minimize the number of disk I/O
operations. Or, if a file is frequently truncated, then future auxiliary
storage allocations will be small extents to minimize the space used.
Additionally, information will be maintained on the stream file sizes for this
system and its activity. This file size information will also be used to help
determine the optimum auxiliary storage allocations for this object as it
relates to the other objects sizes.</td>
</tr>
</table><br><br></dd>
<dt><em>32</em></dt>
<dd>QP0L_ATTR_MAIN_STG_OPT: (CHAR(1)) This option
should be used to determine how main storage is allocated and used by the
system for the specified object. This option can only be specified for stream
files in the "root" (/), QOpenSys and user-defined file systems. Valid values
are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_STG_NORMAL: The main storage will be
allocated normally. That is, as much main storage as possible will be allocated
and used. This minimizes the number of disk I/O operations since the
information is cached in main storage.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_STG_MINIMIZE: The main storage will be
allocated to minimize the space used by the object. That is, as little main
storage as possible will be allocated and used. This minimizes main storage
usage while increasing the number of disk I/O operations since less information
is cached in main storage.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'02'</em></td>
<td align="left" valign="top">QP0L_STG_DYNAMIC: The system will dynamically
determine the optimum main storage allocation for the object depending on other
system activity and main storage contention. That is, when there is little main
storage contention, as much storage as possible will be allocated and used to
minimize the number of disk I/O operations. And when there is significant main
storage contention, less main storage will be allocated and used to minimize
the main storage contention. This option only has an effect when the storage
pool's paging option is *CALC. When the storage pool's paging option is *FIXED,
the behavior is the same as QP0L_STG_NORMAL. When the object is accessed through a
file server, this option has no effect. Instead, its behavior is the same as
QP0L_STG_NORMAL.</td>
</tr>
</table><br><br></dd>
<dt><em>33</em></dt>
<dd>QP0L_ATTR_DIR_FORMAT: (CHAR(1)) The format of the
specified directory object. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_DIR_FORMAT_TYPE1: The directory of type *DIR
has the original directory format. The Convert Directory (CVTDIR) command may
be used to convert from the *TYPE1 format to the *TYPE2 format.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_DIR_FORMAT_TYPE2: The directory of type *DIR
is optimized for performance, size, and reliability compared to directories
having the *TYPE1 format.</td>
</tr>
</table><br><br></dd>
<dt><em>34</em></dt>
<dd>QP0L_ATTR_AUDIT: (CHAR(10)) The auditing value
associated with the object.
<p>Valid values are:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*NONE</em></td>
<td align="left" valign="top">QP0L_AUD_NONE:
No auditing occurs for this object when it is
read or changed regardless of the user who is accessing the object.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*USRPRF</em></td>
<td align="left" valign="top">QP0L_AUD_USRPRF:
Audit this object only if the current user is
being audited. The current user is tested to determine if auditing should be
done for this object. The user profile can specify if only change access is
audited or if both read and change accesses are audited for this object.
<img src="delta.gif" alt="Start of change">
The OBJAUD parameter of the Change User Auditing (CHGUSRAUD) command
is used to change the auditing for a specific user.
<img src="deltaend.gif" alt="End of change">
</td>
</tr>
<tr>
<td align="left" valign="top"><em>*CHANGE</em></td>
<td align="left" valign="top">QP0L_AUD_CHANGE:
Audit all change access to this object by all
users on the system.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*ALL</em></td>
<td align="left" valign="top">QP0L_AUD_ALL:
Audit all access to this object by all users on
the system. All access is defined as a read or change operation.</td>
</tr>
<tr>
<td align="left" valign="top">
<img src="v5r4adelta.gif" alt="Start of change"><em>*NOTAVL</em></td>
<td align="left" valign="top">QP0L_AUD_NOTAVL:
The user performing the operation is not allowed to retrieve the
current auditing value.
<p>
<strong>Note:</strong>
The user must have all object (*ALLOBJ) or audit (*AUDIT)
special authority to retrieve the auditing value.
<img src="v5r4adeltaend.gif" alt="End of change"></p></td>
</tr>
</table><br><br></dd>
<dt>
<em>35</em></dt>
<dd>QP0L_ATTR_CRTOBJSCAN: (CHAR(1)) Whether the
objects created in a directory will be scanned when exit programs are
registered with any of the integrated file system scan-related exit points.
<p>The integrated file system scan-related exit points are:</p>
<ul>
<li><a href="ifscloseexit.htm">Integrated File System Scan on Close Exit
Programs</a></li>
<li><a href="ifsopenexit.htm">Integrated File System Scan on Open Exit
Programs</a>.</li>
</ul>
<p>This attribute can only have been specified for directories in the "root" (/),
QOpenSys and user-defined file systems. Even though this attribute can be set
for *TYPE1 and *TYPE2 directories, only objects which are in
<img src="delta.gif" alt="Start of change">
file systems that have completely converted to the *TYPE2 directory format
<img src="deltaend.gif" alt="End of change">
will actually be scanned, no matter what value is set for this attribute.</p>
<p>Valid values are:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SCANNING_NO: After an object is created in
the directory, the object will not be scanned according to the rules described
in the scan-related exit programs.
<p><strong>Note:</strong>
If the Scan file systems control (QSCANFSCTL) value *NOPOSTRST is not
specified when an object with this attribute is restored, the object will
be scanned at least once after the restore.</p></td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SCANNING_YES: After an object is created in
the directory, the object will be scanned according to the rules described in
the scan-related exit programs if the object has been modified or if the
scanning software has been updated since the last time the object was
scanned.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'02'</em></td>
<td align="left" valign="top">QP0L_SCANNING_CHGONLY: After an object is created
in the directory, the object will be scanned according to the rules described
in the scan-related exit programs only if the object has been modified since
the last time the object was scanned. It will not be scanned if the scanning
software has been updated. This attribute only takes effect if the Scan
file systems control (QSCANFSCTL) system value has *USEOCOATR
specified. Otherwise, it will be treated as if the attribute is
QP0L_SCANNING_YES.
<p><strong>Note:</strong>
If the Scan file systems control (QSCANFSCTL) value *NOPOSTRST is not
specified when an object with this attribute is restored, the object will
be scanned at least once after the restore.</p>
</td>
</tr>
</table><br><br></dd>
<dt>
<em>36</em></dt>
<dd>QP0L_ATTR_SCAN: (CHAR(1)) Whether the object will
be scanned when exit programs are registered with any of the integrated file
system scan-related exit points.
<p>The integrated file system scan-related exit points are:</p>
<ul>
<li><a href="ifscloseexit.htm">Integrated File System Scan on Close Exit
Programs</a></li>
<li><a href="ifsopenexit.htm">Integrated File System Scan on Open Exit
Programs</a>.</li>
</ul>
<p>This attribute can only have been specified for stream files in the "root" (/),
QOpenSys and user-defined file systems. Even though this attribute can be set
for objects in *TYPE1 and *TYPE2 directories, only objects which are in
<img src="delta.gif" alt="Start of change">
file systems that have completely converted to the *TYPE2 directory format
<img src="deltaend.gif" alt="End of change">
will actually be scanned, no matter what value is set for this
attribute.</p>
<p>Valid values are:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SCANNING_NO: The object will not be scanned
according to the rules described in the scan-related exit programs.
<p><strong>Note:</strong>
If the Scan file systems control (QSCANFSCTL) value *NOPOSTRST is not
specified when an object with this attribute is restored, the object will
be scanned at least once after the restore.</p></td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SCANNING_YES: The object will be scanned
according to the rules described in the scan-related exit programs if the
object has been modified or if the scanning software has been updated since the
last time the object was scanned.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'02'</em></td>
<td align="left" valign="top">QP0L_SCANNING_CHGONLY: The object will be scanned
according to the rules described in the scan-related exit programs only if the
object has been modified since the last time the object was scanned. It will
not be scanned if the scanning software has been updated. This attribute only
takes effect if the Scan file systems control (QSCANFSCTL) system
value has *USEOCOATR specified. Otherwise, it will be treated as if the
attribute is QP0L_SCANNING_YES.
<p><strong>Note:</strong>
If the Scan file systems control (QSCANFSCTL) value *NOPOSTRST is not
specified when an object with this attribute is restored, the object will
be scanned at least once after the restore.</p></td>
</tr>
</table><br><br></dd>
<dt><em>37</em></dt>
<dd>QP0L_ATTR_SCAN_INFO: Scan information for this
object. The scan information format is defined in the qp0lstdi.h header file as
data type Qp0l_Scan_Info_t and is shown in the following table:<br>
<br>
<table border width="80%">
<tr>
<th align="left" valign="bottom" colspan="4"><em>Qp0l_Scan_Info_t</em></th>
</tr>
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Scan status</td>
</tr>
<tr>
<td align="center" valign="top">1</td>
<td align="center" valign="top">1</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Scan signatures different</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="center" valign="top">2</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Binary scan</td>
</tr>
<tr>
<td align="center" valign="top">3</td>
<td align="center" valign="top">3</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
<td align="left" valign="top">CCSID 1</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
<td align="left" valign="top">CCSID 2</td>
</tr>
</table>
<p><strong>Note: </strong>Historical information is only kept for the
last two CCSIDs which have been scanned, as well as the
binary scan indication.</p>
<p><strong>Binary scan.</strong> This indicates if the object has been scanned
in binary mode when it was previously scanned. This field will be one of the
following values:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SCAN_NO: The object was not scanned in
binary mode.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SCAN_YES: The object was scanned in binary
mode. If the object scan status is QP0L_SCAN_SUCCESS, then the object was
successfully scanned in binary. If the object scan status is QP0L_SCAN_FAILURE,
then the object failed the scan in binary.</td>
</tr>
</table>
<p><strong>CCSID 1.</strong> A CCSID value that the object has been scanned in
if it was previously scanned in a CCSID. If the object scan status is
QP0L_SCAN_SUCCESS, then the object was successfully scanned in this CCSID. If
the object scan status is QP0L_SCAN_FAILURE, then the object failed the scan in
this CCSID. A value of 0 means this field does not apply.</p>
<p><strong>CCSID 2.</strong> A CCSID value that the object has been scanned in
if it was previously scanned in a CCSID. If the object scan status is
QP0L_SCAN_SUCCESS, then the object was successfully scanned in this CCSID. If
the object scan status is QP0L_SCAN_FAILURE, then this field will be 0. A value
of 0 means this field does not apply.</p>
<p><strong>Reserved.</strong> A reserved field. This field will be set to
binary zero.</p>
<p><strong>Scan signatures different.</strong> The scan signatures give an
indication of the level of the scanning software support. For more information,
see <a href="ifsopenexit.htm#HDRSCkey">Scan Key List and Scan Key
Signatures</a> in <a href="ifsopenexit.htm">Integrated File System Scan on Open
Exit Program</a>.</p>
<p>When an object is in an independent ASP group, the object scan signature is
compared to the associated independent ASP group scan signature. When an object
is <strong>not</strong> in an independent ASP group, the object scan signature
is compared to the global scan signature value. This field will be one of the
following values:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SCAN_NO: The compared signatures are not
different.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SCAN_YES: The compared signatures are
different.</td>
</tr>
</table>
<p><strong>Scan status.</strong> The scan status associated with this object.
This field will be one of the following values:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SCAN_REQUIRED: A scan is required for the
object either because it has not yet been scanned by the scan-related exit
programs, or because the objects data or CCSID has been modified since it was
last scanned. Examples of object data or CCSID modifications are: writing to
the object, directly or through memory mapping; truncating the object; clearing
the object; and changing the objects CCSID attribute etc..</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SCAN_SUCCESS: The object has been scanned by
a scan-related exit program, and at the time of that last scan request, the
object did not fail the scan.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'02'</em></td>
<td align="left" valign="top">QP0L_SCAN_FAILURE: The object has been scanned by
a scan-related exit program, and at the time of that last scan request, the
object failed the scan and the operation did not complete. Once an object has
been marked as a failure, it will not be scanned again until the object's scan
signature is different than the global scan key signature or independent ASP
group scan key signature as appropriate. Therefore, subsequent requests to work
with the object will fail with a scan failure indication
<img src="delta.gif" alt="Start of change">
if that access meets the criteria for when an object is to be scanned.
Examples of requests which will fail are opening the object
with more than write-only access, changing the CCSID of the object,
copying the object etc..
See <a href="ifsopenexit.htm">Integrated File System Scan on Open Exit
Programs</a> and <a href="ifscloseexit.htm">Integrated File System Scan on Close Exit
Programs</a> for the criteria for when an object is to be scanned.
<p><strong>Note:</strong></p>
<ol type="1">
<li>If scanning has been turned off using the QSCANFS system value,
or if no exit programs are registered for a specific exit point,
then any requests which trigger that specific exit point will
return a scan failure indication.</li>
<li>If the scan attribute is set to not scan the object ,
then requests to work with the object will not fail with a
scan failure indication.
<img src="deltaend.gif" alt="End of change"></li>
</ol>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'05'</em></td>
<td align="left" valign="top">QP0L_SCAN_PENDING_CVN: The object is
<img src="delta.gif" alt="Start of change">
in a file system that has not completely converted to the *TYPE2 directory format,
and therefore will not be scanned until the file system is completely
converted. For information on the *TYPE2 directory format,
<img src="deltaend.gif" alt="End of change">
see the <a href=
"../cl/cvtdir.htm">Convert Directory (CVTDIR) command</a> and the
<a href="../ifs/rzaaxkickoff.htm">Integrated file system</a> information
in the Files and file systems topic.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'06'</em></td>
<td align="left" valign="top">QP0L_SCAN_NOT_REQUIRED:
The object does not require any scanning because the object is marked
to not be scanned.
</td>
</tr>
</table><br><br></dd>
<dt>
<em>38</em></dt>
<dd>QP0L_ATTR_ALWSAV: (CHAR(1)) Whether the object
can be saved or not. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_ALWSAV_NO: This object will not be saved
when using the Save Object (SAV) command or the <a href="QsrSave.htm">
QsrSave()</a> API.
<p>Additionally, if this object is a directory, none of the objects in the
directory's subtree will be saved unless they were explicitly specified as an
object to be saved. The subtree includes all subdirectories and the objects
within those subdirectories.</p>
<p><strong>Note:</strong>
If this attribute is chosen for an object that has private authorities
associated with it, or is chosen for the directory of an object
that has private authorities associated with it, then the
following consideration applies. When the private authorities are saved,
the fact that an object has the QP0L_ALWSAV_NO attribute is not taken into
consideration.
(Private authorities can be saved using either the Save System (SAVSYS) or
Save Security Data (SAVSECDTA) command or the
<a href="qsrsavo.htm">Save Object List (QSRSAVO)</a> API.)
Therefore, when a private authority is restored using the
Restore Authority (RSTAUT) command, message CPD3776 will be seen for each
object that was not saved either because it had the QP0L_ALWSAV_NO
attribute specified, or because the object was not specified on the save and
it was in a directory that had the QP0L_ALWSAV_NO attribute specified.
</p>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_ALWSAV_YES: This object will be saved when
using the Save Object (SAV) command or the <a href="QsrSave.htm">QsrSave()</a>
API. </td>
</tr>
</table><br><br></dd>
<dt>
<em>39</em></dt>
<dd>QP0L_ATTR_RSTDRNMUNL: (CHAR(1))
Restricted renames and unlinks for objects within a directory. Objects can be linked into
a directory that has this attribute set on, but cannot be renamed or unlinked from it
unless one or more of the following are true for the user performing the operation:
<ul><li>The user is the owner of the object.</li>
<li>The user is the owner of the directory.</li>
<li>The user has *ALLOBJ special authority.</li>
</ul>
This restriction only applies to directories.
Other types of object can have this attribute on, however, it will be ignored.
This attribute is equivalent to the S_ISVTX mode bit for an object.
Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_RSTDRNMUNL_OFF: No additional restrictions
for rename and unlink operations.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_RSTDRNMUNL_ON: Additional restrictions
for rename and unlink operations.</td>
</tr>
</table><br><br></dd>
<dt>
<em>40</em></dt>
<dd>QP0L_ATTR_JOURNAL_EXTENDED_INFORMATION: Extended Journaling
information for this object. The journaling information format is defined in
the Qp0lstdi.h header file as data type Qp0l_Journal_Extended_Info_t and is shown in the
following table:<br>
<br>
<table border width="80%">
<tr>
<th align="left" valign="bottom" colspan="4"><em>Qp0l_Journal_Extended_Info_t</em></th>
</tr>
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">CHAR(1)</td>
<td align="left" valign="top" width="60%">Journaling status</td>
</tr>
<tr>
<td align="center" valign="top">1</td>
<td align="center" valign="top">1</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Options</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="center" valign="top">2</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Journal identifier (JID)</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="center" valign="top">0C</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Current or last journal name</td>
</tr>
<tr>
<td align="center" valign="top">22</td>
<td align="center" valign="top">16</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Current or last journal library name</td>
</tr>
<tr>
<td align="center" valign="top">32</td>
<td align="center" valign="top">20</td>
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
<td align="left" valign="top">Last journaling start time</td>
</tr>
<tr>
<td align="center" valign="top">36</td>
<td align="center" valign="top">24</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Starting journal receiver for apply</td>
</tr>
<tr>
<td align="center" valign="top">46</td>
<td align="center" valign="top">2E</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Starting journal receiver library name</td>
</tr>
<tr>
<td align="center" valign="top">56</td>
<td align="center" valign="top">38</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Starting journal receiver ASP device</td>
</tr>
<tr>
<td align="center" valign="top">66</td>
<td align="center" valign="top">42</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Apply journaled changes required</td>
</tr>
<tr>
<td align="center" valign="top">67</td>
<td align="center" valign="top">43</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Rollback was ended</td>
</tr>
<tr>
<td align="center" valign="top">68</td>
<td align="center" valign="top">44</td>
<td align="left" valign="top">CHAR(12)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<p><strong>Apply journaled changes required.</strong> Whether the object was restored with partial transactions which would require an Apply Journaled Changes (APYJRNCHG) command to complete the transaction. A partial transaction can occur if an object was saved using save-while-active requesting that transactions with pending record changes do not have to reach a commit boundary before the object is saved. The valid values are:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%"> QP0L_APYJRNCHG_REQ_NO: The object does not have partial transactions.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top"> QP0L_APYJRNCHG_REQ_YES: The object was restored with partial transactions. This object can not be used until the Apply Journaled Changes (APYJRNCHG) or Remove Journaled Changes (RMVJRNCHG) command is used to complete or rollback the partial transactions. </td>
</tr>
</table>
<p><strong>Current or last journal library name.</strong> If the value of the
journaling status is QP0L_JOURNALED, then this field contains the name of the
library containing the currently used journal. If the value of the journaling
status is QP0L_NOT_JOURNALED, then this field contains the name of the library
containing the last used journal. All bytes in this field will be set to binary
zero if this object has never been journaled.</p>
<p><strong>Current or last journal name.</strong> If the value of the
journaling status is QP0L_JOURNALED, then this field contains the name of the
journal currently being used. If the value of the journaling status is
QP0L_NOT_JOURNALED, then this field contains the name of the journal last used
for this object. All bytes in this field will be set to binary zero if this
object has never been journaled.</p>
<p><strong>Journal identifier (JID).</strong> This field associates the object
being journaled with an identifier that can be used on various
journaling-related commands and APIs. </p>
<p><strong>Journaling status.</strong> Current journaling status of the object.
This field will be one of the following values:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_NOT_JOURNALED: The object is currently not
being journaled.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_JOURNALED: The object is currently being
journaled.</td>
</tr>
</table>
<p><strong>Last journaling start time.</strong> The number of seconds since the
Epoch that corresponds to the last date and time for which the object had
journaling started for it. This field will be set to binary zero if this object
has never been journaled.</p>
<p><strong>Options.</strong> This field describes the current journaling
options. This field is composed of several bit flags and contains one or more
of the following bit values:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>x'80'</em></td>
<td align="left" valign="top">QP0L_JOURNAL_SUBTREE: When this flag is returned,
this object is a directory with IFS journaling subtree semantics. New objects
created within this directory's subtree will inherit the journaling attributes
and options from this directory.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'08'</em></td>
<td align="left" valign="top">QP0L_JOURNAL_OPTIONAL_ENTRIES: When journaling is
active, entries that are considered optional are journaled. The list of
optional journal entries varies for each object type.
See the <a href="../ifs/rzaaxkickoff.htm">Integrated file system</a> information
in the Files and file systems topic for information
regarding these optional entries for various objects.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'20'</em></td>
<td align="left" valign="top">QP0L_JOURNAL_AFTER_IMAGES: When journaling is
active, the image of the object after a change is journaled.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'40'</em></td>
<td align="left" valign="top">QP0L_JOURNAL_BEFORE_IMAGES: When journaling is
active, the image of the object prior to a change is journaled.</td>
</tr>
</table>
<p><strong>Reserved.</strong> A reserved field. This field will be set to
binary zero.</p>
<p><strong>Rollback was ended.</strong> Whether the object had rollback ended prior to completion of a request to roll back a transaction. The valid values are:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%"> QP0L_ROLLBACK_END_NO: The object did not have a rollback operation ended prior to completion of a request to roll back a transaction.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top"> QP0L_ROLLBACK_END_YES: The object had a rollback operation ended using the "End Rollback" option on the Work with Commitment Definition (WRKCMTDFN) screnn. It is recommended that the object be restored as it can not be used. As a last resort, the Change Journaled Object (CHGJRNOBJ) command can be used to allow the object to be used. Doing this, however, may leave the object in an inconsistent state. </td>
</tr>
</table>
<p><strong>Starting journal receiver ASP device.</strong> The name of the ASP for the library that contains the starting journal receiver. This field will be blank if no information is available. The valid values are:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*SYSBAS</em></td>
<td align="left" valign="top"> The journal receiver library resides in the system or user ASPs</td>
</tr>
<tr>
<td align="left" valign="top"><em>ASP device</em></td>
<td align="left" valign="top"> The journal receiver library resides in this ASP.</td>
</tr>
</table>
<p><strong>Starting journal receiver for apply.</strong> The oldest journal receiver needed to successfully Apply Journaled Changes (APYJRNCHG). When the Apply journaled Changes required field is set to QP0L_APYJRNCHG_REQ_YES the journal receiver contains the journal entries representing the start of the partial transaction. Otherwise; the journal receiver contains the journal entries representing the start-of-the-save operation. This field will be blank if no information is available. </p>
<p><strong>Starting journal receiver library name.</strong> The name of the library
that contains the journal receiver. This field will be blank if no information
is available.</p>
<img src="delta.gif" alt="Start of change">
<dt><em>41</em></dt>
<dd>QP0L_ATTR_CRTOBJAUD: (CHAR(10)) The create object auditing value
associated with the directory. This is the auditing value given to any objects
created in the directory.
Valid values are:
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*SYSVAL</em></td>
<td align="left" valign="top">QP0L_AUD_SYSVAL:
The object auditing value for the objects
created in the
directory is determined by the system auditing value (QCRTOBJAUD).</td>
</tr>
<tr>
<td align="left" valign="top"><em>*NONE</em></td>
<td align="left" valign="top">QP0L_AUD_NONE:
No auditing occurs for this object when it is
read or changed regardless of the user who is accessing the object.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*USRPRF</em></td>
<td align="left" valign="top">QP0L_AUD_USRPRF:
Audit this object only if the current user is
being audited. The current user is tested to determine if auditing should be
done for this object. The user profile can specify if only change access is
audited or if both read and change accesses are audited for this object.
The OBJAUD parameter of the Change User Auditing (CHGUSRAUD) command
is used to change the auditing for a specific user.
</td>
</tr>
<tr>
<td align="left" valign="top"><em>*CHANGE</em></td>
<td align="left" valign="top">QP0L_AUD_CHANGE:
Audit all change access to this object by all
users on the system.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*ALL</em></td>
<td align="left" valign="top">QP0L_AUD_ALL:
Audit all access to this object by all users on
the system. All access is defined as a read or change operation.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*NOTAVL</em></td>
<td align="left" valign="top">QP0L_AUD_NOTAVL:
The user performing the operation is not allowed to retrieve the
current create object auditing value.
<p><strong>Note:</strong>
The user must have all object (*ALLOBJ) or audit (*AUDIT)
special authority to retrieve the create object auditing value.
</p></td>
</tr>
</table>
<img src="deltaend.gif" alt="End of change"><br><br></dd>
<dd><img src="delta.gif" alt="Start of change"></dd>
<dt><em>42</em></dt>
<dd>QP0L_ATTR_SYSTEM_USE: (CHAR(1)) Whether the file has a special use by the system.
This attribute is valid only for stream files. Possible values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SYSUSE_NONE: The file is a generic stream file.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SYSUSE_VRTVOL: The file is a virtual volume. Examples include tape and optical virtual volumes. </td>
</tr>
<tr>
<td align="left" valign="top"><em>x'02'</em></td>
<td align="left" valign="top">QP0L_SYSUSE_NWSSTG: The file is a network server storage space.</td>
</tr>
</table>
<img src="deltaend.gif" alt="End of change">
<br>
<dt><em>300</em></dt>
<dd>QP0L_ATTR_SUID: (CHAR(1)) Set effective user ID
(UID) at execution time. This value is ignored if the specified object is a
directory. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SUID_OFF: The user ID (UID) is not set at
execution time.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SUID_ON: The object owner is the effective
user ID (UID) at execution time.</td>
</tr>
</table><br><br></dd>
<dt><em>301</em></dt>
<dd>QP0L_ATTR_SGID: (CHAR(1)) Set effective group ID
(GID) at execution time. Valid values are:
<table cellpadding="5">
<tr>
<td align="left" valign="top" width="10%"><em>x'00'</em></td>
<td align="left" valign="top" width="90%">QP0L_SGID_OFF: If the object is a file, the group
ID (GID) is not set at execution time. If the object is a directory in the
"root" (/), QOpenSys, and user-defined file systems, the group ID (GID) of objects
created in the directory is set to the effective GID of the thread creating the
object. This value cannot be set for other file systems.</td>
</tr>
<tr>
<td align="left" valign="top"><em>x'01'</em></td>
<td align="left" valign="top">QP0L_SGID_ON: If the object is a file, the group
ID (GID) is set at execution time. If the object is a directory, the group ID
(GID) of objects created in the directory is set to the GID of the parent
directory.</td>
</tr>
</table></dd>
</dl>
<p><strong>Number of requested attributes.</strong> The total number of
requested attributes that <strong>Qp0lGetAttr()</strong> returns. This field is
required when the <em>Attr_Array_ptr</em> parameter is not NULL and must equal
the number of constants in the array to which it points. When this field is
zero, <strong>Qp0lGetAttr()</strong> returns all the attributes that are
supported by the API and that are available for the object.</p>
</dd>
<dt><strong><em>Buffer_ptr</em></strong></dt>
<dd>(Input) A pointer to a buffer that the caller allocates for <strong>
Qp0lGetAttr()</strong> to return the requested data. The caller also sets the
<em>Buffer_Size_Provided</em> parameter to the number of bytes that are
allocated for this buffer.
<p>If the buffer provided is not large enough to hold all of the requested
data, <strong>Qp0lGetAttr()</strong> fills the buffer with as much data as
possible and sets the value pointed to by the <em>Buffer_Size_Needed_ptr</em>
parameter equal to the number of bytes required for all of the requested data
to be returned.</p>
<p>When the <em>Buffer_ptr</em> is NULL, <strong>Qp0lGetAttr()</strong> returns
the total number of bytes needed to hold all of the requested attributes and
sets the <em>Buffer_Size_Needed_ptr</em> parameter to point to this value.</p>
<p><strong>Qp0lGetAttr()</strong> identifies each entry that it returns in the
buffer with the constant that the user supplied in the input structure pointed
to by the <em>Attr_Array_ptr</em> parameter. <strong>Qp0lGetAttr()</strong>
returns this constant in the Attribute identification field. The constant must
be used to identify the returned attribute because the attributes are returned
in any order.</p>
<p><strong>Qp0lGetAttr()</strong> fills the buffer with an entry for each
requested attribute in the following format:</p>
<table border width="80%">
<tr>
<th align="left" valign="bottom" colspan="4"><em><a name="Table_1-7">Buffer
Pointer</a></em></th>
</tr>
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Offset to next attribute entry</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Attribute identification</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Size of attribute data</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="center" valign="top">C</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">16</td>
<td align="center" valign="top">10</td>
<td align="left" valign="top">CHAR(*)</td>
<td align="left" valign="top">Attribute data</td>
</tr>
</table>
<p><strong>Attribute data.</strong> The attribute data that was requested.</p>
<p><strong>Attribute identification.</strong> The constant that identifies the
returned attribute. Valid values follow and are the same constants as provided
by the caller of <strong>Qp0lGetAttr()</strong>, pointed to by the <em>
Attr_Array_ptr</em> parameter.</p>
<p>See the <a href="#attr_array_ptr"><em>Attr_Array_ptr</em></a> parameter for
descriptions of each of these attribute values.</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">QP0L_ATTR_OBJTYPE</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">QP0L_ATTR_DATA_SIZE</td>
</tr>
<tr>
<td align="left" valign="top"><em>2</em></td>
<td align="left" valign="top">QP0L_ATTR_ALLOC_SIZE</td>
</tr>
<tr>
<td align="left" valign="top"><em>3</em></td>
<td align="left" valign="top">QP0L_ATTR_EXTENDED_ATTR_SIZE</td>
</tr>
<tr>
<td align="left" valign="top"><em>4</em></td>
<td align="left" valign="top">QP0L_ATTR_CREATE_TIME</td>
</tr>
<tr>
<td align="left" valign="top"><em>5</em></td>
<td align="left" valign="top">QP0L_ATTR_ACCESS_TIME</td>
</tr>
<tr>
<td align="left" valign="top"><em>6</em></td>
<td align="left" valign="top">QP0L_ATTR_CHANGE_TIME</td>
</tr>
<tr>
<td align="left" valign="top"><em>7</em></td>
<td align="left" valign="top">QP0L_ATTR_MODIFY_TIME</td>
</tr>
<tr>
<td align="left" valign="top"><em>8</em></td>
<td align="left" valign="top">QP0L_ATTR_STG_FREE</td>
</tr>
<tr>
<td align="left" valign="top"><em>9</em></td>
<td align="left" valign="top">QP0L_ATTR_CHECKED_OUT</td>
</tr>
<tr>
<td align="left" valign="top"><em>10</em></td>
<td align="left" valign="top">QP0L_ATTR_LOCAL_REMOTE</td>
</tr>
<tr>
<td align="left" valign="top"><em>11</em></td>
<td align="left" valign="top">QP0L_ATTR_AUTH</td>
</tr>
<tr>
<td align="left" valign="top"><em>12</em></td>
<td align="left" valign="top">QP0L_ATTR_FILE_ID</td>
</tr>
<tr>
<td align="left" valign="top"><em>13</em></td>
<td align="left" valign="top">QP0L_ATTR_ASP</td>
</tr>
<tr>
<td align="left" valign="top"><em>14</em></td>
<td align="left" valign="top">QP0L_ATTR_DATA_SIZE_64</td>
</tr>
<tr>
<td align="left" valign="top"><em>15</em></td>
<td align="left" valign="top">QP0L_ATTR_ALLOC_SIZE_64</td>
</tr>
<tr>
<td align="left" valign="top"><em>16</em></td>
<td align="left" valign="top">QP0L_ATTR_USAGE_INFORMATION</td>
</tr>
<tr>
<td align="left" valign="top"><em>17</em></td>
<td align="left" valign="top">QP0L_ATTR_PC_READ_ONLY</td>
</tr>
<tr>
<td align="left" valign="top"><em>18</em></td>
<td align="left" valign="top">QP0L_ATTR_PC_HIDDEN</td>
</tr>
<tr>
<td align="left" valign="top"><em>19</em></td>
<td align="left" valign="top">QP0L_ATTR_PC_SYSTEM</td>
</tr>
<tr>
<td align="left" valign="top"><em>20</em></td>
<td align="left" valign="top">QP0L_ATTR_PC_ARCHIVE</td>
</tr>
<tr>
<td align="left" valign="top"><em>21</em></td>
<td align="left" valign="top">QP0L_ATTR_SYSTEM_ARCHIVE</td>
</tr>
<tr>
<td align="left" valign="top"><em>22</em></td>
<td align="left" valign="top">QP0L_ATTR_CODEPAGE</td>
</tr>
<tr>
<td align="left" valign="top"><em>23</em></td>
<td align="left" valign="top">QP0L_ATTR_FILE_FORMAT</td>
</tr>
<tr>
<td align="left" valign="top"><em>24</em></td>
<td align="left" valign="top">QP0L_ATTR_UDFS_DEFAULT_FORMAT</td>
</tr>
<tr>
<td align="left" valign="top"><em>25</em></td>
<td align="left" valign="top">QP0L_ATTR_JOURNAL_INFORMATION</td>
</tr>
<tr>
<td align="left" valign="top"><em>26</em></td>
<td align="left" valign="top">QP0L_ATTR_ALWCKPWRT</td>
</tr>
<tr>
<td align="left" valign="top"><em>27</em></td>
<td align="left" valign="top">QP0L_ATTR_CCSID</td>
</tr>
<tr>
<td align="left" valign="top"><em>28</em></td>
<td align="left" valign="top">QP0L_ATTR_SIGNED</td>
</tr>
<tr>
<td align="left" valign="top"><em>29</em></td>
<td align="left" valign="top">QP0L_ATTR_SYS_SIGNED</td>
</tr>
<tr>
<td align="left" valign="top"><em>30</em></td>
<td align="left" valign="top">QP0L_ATTR_MULT_SIGS</td>
</tr>
<tr>
<td align="left" valign="top"><em>31</em></td>
<td align="left" valign="top">QP0L_ATTR_DISK_STG_OPT</td>
</tr>
<tr>
<td align="left" valign="top"><em>32</em></td>
<td align="left" valign="top">QP0L_ATTR_MAIN_STG_OPT</td>
</tr>
<tr>
<td align="left" valign="top"><em>33</em></td>
<td align="left" valign="top">QP0L_ATTR_DIR_FORMAT</td>
</tr>
<tr>
<td align="left" valign="top"><em>34</em></td>
<td align="left" valign="top">QP0L_ATTR_AUDIT</td>
</tr>
<tr>
<td align="left" valign="top">
<em>35</em></td>
<td align="left" valign="top">QP0L_ATTR_CRTOBJSCAN </td>
</tr>
<tr>
<td align="left" valign="top">
<em>36</em></td>
<td align="left" valign="top">QP0L_ATTR_SCAN </td>
</tr>
<tr>
<td align="left" valign="top">
<em>37</em></td>
<td align="left" valign="top">QP0L_ATTR_SCAN_INFO </td>
</tr>
<tr>
<td align="left" valign="top">
<em>38</em></td>
<td align="left" valign="top">QP0L_ATTR_ALWSAV </td>
</tr>
<tr>
<td align="left" valign="top">
<em>39</em></td>
<td align="left" valign="top">QP0L_ATTR_RSTDRNMUNL</td>
</tr>
<tr>
<td align="left" valign="top">
<em>40</em></td>
<td align="left" valign="top">QP0L_ATTR_JOURNAL_EXTENDED_INFORMATION</td>
</tr>
<tr>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">
<em>41</em></td>
<td align="left" valign="top">QP0L_ATTR_CRTOBJAUD
<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">
<em>42</em></td>
<td align="left" valign="top">QP0L_ATTR_SYSTEM_USE
<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="left" valign="top"><em>300</em></td>
<td align="left" valign="top">QP0L_ATTR_SUID</td>
</tr>
<tr>
<td align="left" valign="top"><em>301</em></td>
<td align="left" valign="top">QP0L_ATTR_SGID</td>
</tr>
</table>
<p><strong>Offset to next attribute entry.</strong> The offset to the next
attribute entry in the buffer. This offset is relative to the start of the
buffer. An offset of zero means that no more attribute entries follow.</p>
<p><strong>Reserved.</strong> A reserved field set to binary zero.</p>
<p><strong>Size of attribute data.</strong> The total size of all the data for
this attribute. The special value of 0 in this field indicates that the
attribute is not supported by the file system in which the object is stored.
The attribute data is padded with hexadecimal zeros. The size indicated in this
field does not include the padding bytes.</p>
</dd>
<dt><strong><em>Buffer_Size_Provided</em></strong></dt>
<dd>(Input) The number of bytes the caller allocates in a buffer for the return
of requested data. The buffer is pointed to by the <em>Buffer_ptr</em>
parameter.
<p>If this size is set to zero or is not large enough to hold all of the
requested data, <strong>Qp0lGetAttr()</strong> fills the buffer with as much
data as possible and sets the value pointed to by the <em>
Buffer_Size_Needed_ptr</em> parameter equal to the number of bytes required for
all of the requested data to be returned.</p>
<p>
When determining the appropriate allocation, the caller should assume
that the returned attribute
data will be aligned on a minimum of an 8-byte boundary.</p>
</dd>
<dt><strong><em>Buffer_Size_Needed_ptr</em></strong></dt>
<dd>(Output) A pointer to the number of bytes that the caller needs to allocate
for <strong>Qp0lGetAttr()</strong> to return all of the requested data.<br>
<br>
</dd>
<dt><strong><em>Num_Bytes_Returned_ptr</em></strong></dt>
<dd>(Output) A pointer to the actual number of bytes of data returned in the
user buffer. This field is zero if the <em>Buffer_ptr</em> parameter is
NULL.<br>
<br>
</dd>
<dt><strong><em>Follow_Symlnk</em></strong></dt>
<dd>(Input) If the last component in the <em>Path_Name</em> is a symbolic link,
this parameter determines if the symbolic link or the path contained in the
symbolic link is acted upon: Valid values are:
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">QP0L_DONOT_FOLLOW_SYMLNK: A symbolic link in the
last component is not followed. Attributes of the symbolic link object are
returned.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">QP0L_FOLLOW_SYMLNK: A symbolic link in the last
component is followed. The attributes of the object contained in the symbolic
link are returned.</td>
</tr>
</table>
</dd>
</dl>
<br>
<h3>Authorities</h3>
<p><strong>Note:</strong> Adopted authority is not used.</p>
<table border width="100%">
<tr>
<th align="left" valign="bottom" colspan="3"><em><a name="TBLASWP1G">
Authorization Required for Qp0lGetAttr()</a></em></th>
</tr>
<tr>
<th align="left" valign="bottom">Object Referred to</th>
<th align="left" valign="bottom">Authority Required</th>
<th align="left" valign="bottom"><em>errno</em></th>
</tr>
<tr>
<td align="left" valign="top" width="65%">Each directory, preceding the last
component, in the <em>Path_Name</em>
<img src="v5r4adelta.gif" alt="Start of change">
(except when only QP0L_ATTR_AUDIT and/or QP0L_ATTR_CRTOBJAUD
are requested)
<img src="v5r4adeltaend.gif" alt="End of change">
</td>
<td align="left" valign="top" width="20%">*X</td>
<td align="left" valign="top" width="15%">EACCES</td>
</tr>
<tr>
<td align="left" valign="top">Object, when retrieving the QP0L_ATTR_AUTH
attribute</td>
<td align="left" valign="top">*OBJMGT</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" colspan="3"><strong>Note:</strong> If the file
system supports *ALLOBJ special authority and if you have *ALLOBJ special
authority, you do not need the listed object authority.</td>
</tr>
</table>
<br>
<br>
<h3>Return Value</h3>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top"><strong>Qp0lGetAttr()</strong> was
successful.</td>
</tr>
<tr>
<td align="left" valign="top"><em>-1</em></td>
<td align="left" valign="top"><strong>Qp0lGetAttr()</strong> was not
successful. The <em>errno</em> global variable is set to indicate the
error.</td>
</tr>
</table>
<br>
<br>
<h3>Error Conditions</h3>
<p>If <strong>Qp0lGetAttr()</strong> is not successful, <em>errno</em>
indicates one of the following errors:</p>
<table cellpadding="5">
<!-- cols="25 75" -->
<tr>
<th align="left" valign="bottom">Error condition</th>
<th align="left" valign="bottom">Additional information</th>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EACCES">EACCES</a>]</em></td>
<td align="left" valign="top">
<p>If you are accessing a remote file through the Network File System, update
operations to file permissions at the server are not reflected at the client
until updates to data that is stored locally by the Network File System take
place. (Several options on the Add Mounted File System (ADDMFS) command
determine the time between refresh operations of local data.) Access to a
remote file may also fail due to different mappings of user IDs (UID) or group
IDs (GID) on the local and remote systems.</p>
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EAGAIN">EAGAIN</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EBADFID">EBADFID</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EBADNAME">EBADNAME</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EBUSY">EBUSY</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ECANCEL">ECANCEL</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ECONVERT">ECONVERT</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EDAMAGE">EDAMAGE</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EFAULT">EFAULT</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EINTR">EINTR</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EINVAL">EINVAL</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EIO">EIO</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ELOOP">ELOOP</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENAMETOOLONG">ENAMETOOLONG</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENOENT">ENOENT</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENOMEM">ENOMEM</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENOSPC">ENOSPC</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENOTAVAIL">ENOTAVAIL</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENOTDIR">ENOTDIR</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENOTSAFE">ENOTSAFE</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENOTSUP">ENOTSUP</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EOFFLINE">EOFFLINE</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EOVERFLOW">EOVERFLOW</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EPERM">EPERM</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EROOBJ">EROOBJ</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EUNKNOWN">EUNKNOWN</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
</table>
<p>Additionally, if interaction with a file server is required to access the
object, <em>errno</em> could also indicate one of the following errors:</p>
<table cellpadding="5">
<!-- cols="25 75" -->
<tr>
<th align="left" valign="bottom">Error condition</th>
<th align="left" valign="bottom">Additional information</th>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EADDRNOTAVAIL">EADDRNOTAVAIL</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ECONNABORTED">ECONNABORTED</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ECONNREFUSED">ECONNREFUSED</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ECONNRESET">ECONNRESET</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EHOSTDOWN">EHOSTDOWN</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EHOSTUNREACH">EHOSTUNREACH</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENETDOWN">ENETDOWN</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENETRESET">ENETRESET</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENETUNREACH">ENETUNREACH</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ESTALE">ESTALE</a>]</em></td>
<td align="left" valign="top">
<p>If you are accessing a remote file through the Network File System, the file
may have been deleted at the server.</p>
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ETIMEDOUT">ETIMEDOUT</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EUNATCH">EUNATCH</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
</table>
<br>
<h3>Error Messages</h3>
<p>The following messages may be sent from this function:</p>
<table width="100%" cellpadding="5">
<!-- cols="15 85" -->
<tr>
<th align="left" valign="top" nowrap>Message ID</th>
<th align="left" valign="top">Error Message Text</th>
</tr>
<tr>
<td align="left" valign="top">CPE3418 E</td>
<td align="left" valign="top">Possible APAR condition or hardware failure.</td>
</tr>
<tr>
<td align="left" valign="top">CPFA0D4 E</td>
<td align="left" valign="top">File system error occurred. Error number
&amp;1</td>
</tr>
<tr>
<td align="left" valign="top">CPF3CF2 E</td>
<td align="left" valign="top">Error(s) occurred during running of &amp;1
API.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9872 E</td>
<td align="left" valign="top">Program or service program &amp;1 in library
&amp;2 ended. Reason code &amp;3.</td>
</tr>
</table>
<br>
<br>
<h3><a name="usage_notes">Usage Notes</a></h3>
<ol>
<li>This function will fail with error code [ENOTSAFE] when all the following
conditions are true:<br>
<br>
<ul>
<li>Where multiple threads exist in the job.<br>
<br>
</li>
<li>The object on which this function is operating resides in a file system
that is not threadsafe. Only the following file systems are threadsafe for this
function:
<ul>
<li>"Root" (/)</li>
<li>QOpenSys</li>
<li>User-defined</li>
<li>QNTC</li>
<li>QSYS.LIB</li>
<li>Independent ASP QSYS.LIB</li>
<li>QOPT</li>
<li>Network File System</li>
<li>QFileSvr.400</li>
</ul>
</li>
</ul>
<br>
</li>
<li>
"Root" (/), QOpenSys, and User-Defined File System Differences
<p>The QP0L_ATTR_ALLOC_SIZE and QP0L_ATTR_ALLOC_SIZE_64 values can be influenced by
the setting of the disk storage option attribute. See
QP0L_ATTR_DISK_STG_OPT for more information.</p></li>
<li>QSYS.LIB and Independent ASP QSYS.LIB File System Differences
<p><strong>Qp0lGetAttr()</strong> could return zero for the
QP0L_ATTR_ACCESS_TIME value (in the buffer area) under some conditions.</p>
<p>Refer to the <a href="../rbam6/clpro.htm">CL Programming</a> topic for more
information regarding which object types maintain usage information that is
returned for the QP0L_ATTR_USAGE_INFORMATION attribute.</p>
<p>When <strong>Qp0lGetAttr()</strong> is performed on a physical file member,
the QP0L_ATTR_JOURNAL_INFORMATION or QP0L_ATTR_JOURNAL_EXTEND_INFORMATION
attribute will contain journaling information
applicable to the physical file that contains the member.</p>
</li>
<li>
<img src="v5r4adelta.gif" alt="Start of change">
QFileSvr.400 File System Differences
<p>
If only the QP0L_ATTR_AUDIT or QP0L_ATTR_CRTOBJAUD attributes are requested,
the QSECOFR user profiles on the source and
target system must be enabled, and their passwords
must match for the operation to succeed.
<img src="v5r4adeltaend.gif" alt="End of change"></p>
</li>
<li>
<img src="delta.gif" alt="Start of change">
Network File System Differences
<p>
If the user has the appropriate authority when requesting
the QP0L_ATTR_AUDIT attribute for objects in the Network File System,
the value QP0L_AUD_NONE will always be returned.
<img src="deltaend.gif" alt="End of change"></p>
</li>
</ol>
<br>
<h3>Related Information</h3>
<ul>
<li>The &lt;<strong>Qp0lstdi.h</strong>&gt; file (see <a href="unix13.htm">
Header Files for UNIX-Type Functions</a>)
</li>
<li>The &lt;<strong>qlg.h</strong>&gt; file (see <a href="unix13.htm">Header
Files for UNIX-Type Functions</a>)
</li>
<li><a href="chmod.htm">chmod()</a>--Change File Authorizations
</li>
<li><a href=
"ifscloseexit.htm">Integrated File System Scan on Close Exit Programs</a>
</li>
<li><a href=
"ifsopenexit.htm">Integrated File System Scan on Open Exit Programs</a>.
</li>
<li><a href="fstat.htm">fstat()</a>--Get File Information by Descriptor
</li>
<li><a href="lstat.htm">lstat()</a>--Get File or Link Information
</li>
<li><a href="qgetattru.htm">QlgGetAttr()</a>--Get Attributes (using NLS-enabled
path name)
</li>
<li><a href="statu.htm">QlgStat()</a>--Get File Information (using NLS-enabled
path name)
</li>
<li><a href="lstatu.htm">QlgLstat()</a>--Get File or Link Information (using
NLS-enabled path name)
</li>
<li><a href="qsetattr.htm">Qp0lSetAttr()</a>--Set Attributes
</li>
<li><a href=
"qwcrsval.htm">Retrieve System Values (QWCRSVAL) API</a>
</li>
<li><a href="stat.htm">stat()</a>--Get File Information</li>
</ul>
<br>
<h3>Example</h3>
<p>See <a href="../apiref/aboutapis.htm#codedisclaimer">Code disclaimer information</a>
for information pertaining to code examples.</p>
<p>Following is an example showing a call to <strong>Qp0lGetAttr()</strong>.
The example also shows a call to <strong>Qp0lSaveStgFree()</strong>.</p>
<pre>
/*****************************************************************/
#include "Qp0lstdi.h"
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;qusec.h&gt;
#include &lt;time.h&gt;
int Save(Qp0l_Pathnames_t *Path_name_ptr)
{
/**************************************************************/
/* No function here in the example */
/**************************************************************/
};
void SaveAnObject(Qp0l_Pathnames_t *Path_name_ptr,
int *Return_code_ptr,
int *Return_value_ptr,
void *Function_CtlBlk_ptr)
{
/**************************************************************/
/* This function saves a file and its hard links to tape. */
/**************************************************************/
int rc;
if ((Path_name_ptr == (Qp0l_Pathnames_t *)NULL) ||
(Path_name_ptr-&gt;Number_Of_Names == 0))
{
printf("In User Exit Program with null Path \n");
}
else
{
/* This example calls a function (Save) that could call the */
/* Save Object (QsrSave) API. The QsrSave API is designed to */
/* save a copy of one or more objects that can be used in the */
/* integrated file system. For details on using QsrSave, see */
/* the Backup and Recovery API part. */
rc = (Save(Path_name_ptr));
*Return_code_ptr = rc;
*Return_value_ptr = errno;
if (rc == 0)
{
/* Other processing for a successfully saved object. */
}
else
{
/* Optional processing such as storing information */
/* to be returned to the caller in the function */
/* control block area, or building a list of the */
/* files whose save attempts failed, or other. */
}
}
return;
} /* end SaveAnObject exit program */
int main (int argc, char *argv[])
{
#define MYPN "ADIR/ASTMF"
const char US_const[3]= "US";
const char Language_const[4]="ENU";
const char Path_Name_Del_const[2] = "/";
struct pnstruct
{
Qlg_Path_Name_T qlg_struct;
char pn[1];
};
struct pnstruct pns;
struct pnstruct *pns_ptr = NULL;
struct attrStruct
{
Qp0l_AttrTypes_List_t attr_struct;
uint AttrTypes[10];
};
struct attrStruct Attr_types_ptr;
Qp0l_Attr_Header_t *attrPtr;
char *attrValp;
Qp0l_StgFree_Function_t User_function;
struct
{
uint AnyData_to_the_exitprogram;
uint AnyData_not_processed_by_the_API;
} CtlBlkAreaName;
time_t mytime;
char BufferArea[250];
unsigned int buff_size_provided;
unsigned int buff_size_needed = 0;
unsigned int num_bytes_returned = 0;
unsigned int follow_sym;
int done=0;
int rc;
int returned_data_index = 0;
/**************************************************************/
/* Initialize Get Attributes Parameters */
/**************************************************************/
memset((void*)&amp;pns, 0x00, sizeof(struct pnstruct));
pns.qlg_struct.CCSID = 37;
memcpy(pns.qlg_struct.Country_ID,US_const,2);
memcpy(pns.qlg_struct.Language_ID,Language_const,3);
pns.qlg_struct.Path_Type = 0;
pns.qlg_struct.Path_Length = sizeof(MYPN)-1;
memcpy(pns.qlg_struct.Path_Name_Delimiter,Path_Name_Del_const,1);
memcpy(pns.pn,MYPN,sizeof(MYPN));
memset((void *)&amp;Attr_types_ptr, 0x00,sizeof(struct attrStruct));
pns_ptr = &amp;pns;
Attr_types_ptr.attr_struct.Number_Of_ReqAttrs = 2;
Attr_types_ptr.AttrTypes[0] = QP0L_ATTR_ACCESS_TIME;
Attr_types_ptr.AttrTypes[1] = QP0L_ATTR_STG_FREE;
buff_size_provided = 250;
follow_sym = QP0L_FOLLOW_SYMLNK;
/**************************************************************/
/* Call the Qp0lGetAttr() API to retrieve attributes to */
/* determine if selection criteria can be met for calling */
/* the Qp0lSaveStgFree() API. */
/**************************************************************/
rc = Qp0lGetAttr((Qlg_Path_Name_T *)&amp;pns,
(Qp0l_AttrTypes_List_t *)&amp;Attr_types_ptr,
BufferArea,
buff_size_provided,
&amp;buff_size_needed,
&amp;num_bytes_returned,
follow_sym);
if (rc == 0) /* check API return code */
{
/* Must first check if any data was returned. */
if (num_bytes_returned &gt; 0)
{
attrPtr = (Qp0l_Attr_Header_t *)BufferArea;
while(!done)
{
attrValp = (char *)attrPtr +
sizeof(Qp0l_Attr_Header_t); /* Point to attr value */
/******************************************************/
/* The following code prints the two attributes that */
/* were returned. Add more code here, for example, */
/* to determine if the returned attributes meet */
/* the criteria or policies for storage freeing. */
/******************************************************/
printf ("******************************************\n");
printf ("Attr ID #%d = %d - ",
returned_data_index,
attrPtr-&gt;Attr_ID);
if(attrPtr-&gt;Attr_Size &gt; 0)
{
switch (attrPtr-&gt;Attr_ID)
{
case QP0L_ATTR_ACCESS_TIME:
printf("QP0L_ATTR_ACCESS_TIME\n");
memcpy((void *)&amp;mytime,
(void *)attrValp,
attrPtr-&gt;Attr_Size);
printf ("%s", ctime(&amp;mytime));
break;
case QP0L_ATTR_STG_FREE:
printf ("QP0L_ATTR_STG_FREE\n");
switch (attrValp[0])
{
case QP0L_SYS_STG_FREE:
printf ("--Is storage freed--\n");
break;
case QP0L_SYS_NOT_STG_FREE:
printf ("--Is not storage freed--\n");
break;
default:
printf ("Invalid data: %d.\n",
attrValp[0]);
break;
}
break;
default:
printf ("Undefined return type (attr id unknown.)\n");
break;
} /* end switch */
}
else
printf("Attribute has no value\n");
printf("***Size of this attr's data: %d\n",
attrPtr-&gt;Attr_Size);
printf("***Offset to next attr: %d\n",
attrPtr-&gt;Next_Attr_Offset);
++returned_data_index;
if(attrPtr-&gt;Next_Attr_Offset &gt; 0) /* If more data */
attrPtr = (Qp0l_Attr_Header_t *) /* Set attribute */
&amp;(BufferArea[attrPtr-&gt;Next_Attr_Offset]); /* pointer */
else /* No more data */
done = 1; /* End the loop */
}
/**********************************************************/
/* Initialize Save Storage Free Parameters. The path */
/* name parameter was already initialized as part of the */
/* call to Qp0lGetAttr() API and is assumed, in this */
/* example, to be the same pathname. Both APIs require */
/* the same path name format. */
/**********************************************************/
memset((void *)&amp;User_function,0x00,sizeof(Qp0l_StgFree_Function_t));
User_function.Mltthdacn[0] = QP0L_MLTTHDACN_NOMSG;
User_function.Function_Type = QP0L_USER_FUNCTION_PTR;
User_function.Procedure = &amp;SaveAnObject;
rc = Qp0lSaveStgFree((Qlg_Path_Name_T *)&amp;pns,
&amp;User_function,
&amp;CtlBlkAreaName);
if(rc == 0)
printf("Qp0lSaveStgFree() Successful!");
else
{/* Unsuccessful return from Qp0lSaveStgFree() API. */
/* The following code prints the errno value message. */
rc = errno;
printf("ERROR on Qp0lSaveStgFree(): error = %d\n", rc);
perror("Error message");
}
} /* if (num_bytes_returned &gt; 0) */
else
rc = EUNKNOWN;
} /* end rcGA == 0, Qp0lGetAttr() was successful */
else
{
rc = errno;
printf("ERROR on Qp0lGetAttr(): error = %d\n", rc);
perror("Error message");
}
return(rc);
} /* end main */
</pre>
<br>
<hr>
API introduced: V4R3
<hr>
<center>
<table cellpadding="2" cellspacing="2">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"unix.htm">UNIX-Type APIs</a> | <a href="aplist.htm">APIs by category</a></td>
</tr>
</table>
</center>
</body>
</html>