1166 lines
41 KiB
HTML
1166 lines
41 KiB
HTML
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||
|
<!-- saved from url=(0072)https://w3.rchland.ibm.com/projects/api-cl/api/templates/iletemplate.htm -->
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||
|
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
|
||
|
<title>Retrieve Referenced Objects (QP0LRRO) API</title>
|
||
|
<!-- Begin header records -->
|
||
|
<!-- 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. -->
|
||
|
<!-- file cleaned -->
|
||
|
<!-- Created by Dale Erickson for V5R3 -->
|
||
|
<!-- Change History: -->
|
||
|
<!-- 020328 ericksd: New document -->
|
||
|
<!-- 030326 JTROUS: Fix up cross links etc -->
|
||
|
<!-- 030612 ericksd: Fix up example program. -->
|
||
|
<!-- 031024 VONBERGE: Make example program compile. Minor wording-->
|
||
|
<!-- fixups. -->
|
||
|
<!-- 040106 VONBERGE: Correct pathname description for XPF -->
|
||
|
<!-- PTR 9A48021. -->
|
||
|
<!-- 050503 VONBERGE: Change threadsafety to No -->
|
||
|
<!--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 type="text/javascript" language="Javascript" src="../rzahg/synch.js">
|
||
|
</script>
|
||
|
|
||
|
<h2>Retrieve Referenced Objects
|
||
|
(QP0LRRO) API</h2>
|
||
|
|
||
|
<div class="box" style="width: 80%;">
|
||
|
<br>
|
||
|
Syntax<br>
|
||
|
|
||
|
|
||
|
<pre>
|
||
|
#include <qp0lrro.h>
|
||
|
void QP0LRRO(
|
||
|
void * Receiver_Variable,
|
||
|
unsigned int Length_Of_Receiver_Variable,
|
||
|
char * Receiver_Format_Name,
|
||
|
void * Job_Identification,
|
||
|
char * Job_Identification_Format,
|
||
|
void * Error_Code
|
||
|
);
|
||
|
</pre>
|
||
|
|
||
|
Default Public Authority: *USE<br>
|
||
|
<!-- iddvc RMBR -->
|
||
|
<br>
|
||
|
<img src="delta.gif" alt="Start of change">
|
||
|
Threadsafe: No
|
||
|
<img src="deltaend.gif" alt="End of change">
|
||
|
<!-- iddvc RMBR -->
|
||
|
<br>
|
||
|
</div>
|
||
|
|
||
|
<p>The <strong>QP0LRRO()</strong> API is used to retrieve information
|
||
|
about integrated file system objects that are currently referenced by a
|
||
|
specific job.</p>
|
||
|
|
||
|
<p>A reference is an individual type of access or lock obtained on the object
|
||
|
when using integrated file system interfaces. An object may have multiple
|
||
|
references concurrently held, provided that the reference types do not conflict
|
||
|
with one another.</p>
|
||
|
|
||
|
<p>This API will not return information about byte range locks that may
|
||
|
currently be held on an object.</p>
|
||
|
|
||
|
<br>
|
||
|
|
||
|
|
||
|
<h3>Parameters</h3>
|
||
|
|
||
|
<dl>
|
||
|
<dt><strong>Receiver_Variable</strong></dt>
|
||
|
|
||
|
<dd>(Output)
|
||
|
<p>The variable that is to receive the information requested. You can specify
|
||
|
the size of this area to be smaller than the format requested as long as you
|
||
|
specify the length parameter correctly. As a result, the API will return only
|
||
|
complete records that the area can hold. A complete record is defined as the
|
||
|
object list output structure (Qp0l_PObj_List_Output_T) along with the extended
|
||
|
reference types, the Qlg_Path_Name_T structure and path of the object if it can
|
||
|
be returned.</p>
|
||
|
|
||
|
<p>The format of the output is described by the RROO0100 output format.
|
||
|
See <a href="#objref2">RROO0100 Output Format Description</a> for a detailed
|
||
|
description of these output formats.</p>
|
||
|
</dd>
|
||
|
|
||
|
<dt><strong>Length_Of_Receiver_Variable</strong></dt>
|
||
|
|
||
|
<dd>(Input)
|
||
|
|
||
|
<p>The length of the receiver variable. If the length specified is larger than the
|
||
|
size allocated for the receiver variable, the results may not be predictable. The minimum
|
||
|
length is 8 bytes.</p>
|
||
|
</dd>
|
||
|
|
||
|
<dt><strong>Receiver_Format_Name</strong></dt>
|
||
|
|
||
|
<dd>(Input)
|
||
|
|
||
|
<p>Pointer to an 8-byte character string that identifies the desired output format.
|
||
|
It must be one of the following values.</p>
|
||
|
|
||
|
<dl>
|
||
|
<dt><em>RROO0100</em></dt>
|
||
|
<dd>The reference type output will be formatted in the RROO0100 output format. See
|
||
|
<a href="#objref2">RROO0100 Output Format Description</a> for a detailed
|
||
|
description of this output format.<br>
|
||
|
<br>
|
||
|
</dd>
|
||
|
</dl>
|
||
|
</dd>
|
||
|
|
||
|
<dt><strong>Job_Identification</strong></dt>
|
||
|
|
||
|
<dd>(Input)
|
||
|
|
||
|
<p>Pointer to the structure that is used to identify the job or thread for
|
||
|
which the integrated file system objects
|
||
|
are referenced. See the various job formats available in the
|
||
|
<a href="qwcrjblk.htm">Retrieve Job Locks (QWCRJBLK) API</a>
|
||
|
for a detailed description of this input format.</p>
|
||
|
</dd>
|
||
|
|
||
|
<dt><strong>Job_Identification_Format</strong></dt>
|
||
|
|
||
|
<dd>(Input)
|
||
|
|
||
|
<p>Pointer to an 8-byte character string that is used to identify the format of the job or thread identification
|
||
|
information.
|
||
|
The format name must be one of the following values.</p>
|
||
|
|
||
|
<table cellpadding="5">
|
||
|
<!-- cols="15 85" -->
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>JIDF0100</em></td>
|
||
|
<td align="left" valign="top">This format is used to retrieve the references that a
|
||
|
job and threads are holding. See
|
||
|
<a href="qwcrjblk.htm#JIDF0100">JIDF0100 Format</a> in
|
||
|
<a href="qwcrjblk.htm">Retrieve Job Locks (QWCRJBLK) API</a>
|
||
|
for more information.<br>
|
||
|
<br>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>JIDF0200</em></td>
|
||
|
<td align="left" valign="top">This format is used to retrieve the references that a
|
||
|
specific thread is holding. See
|
||
|
<a href="qwcrjblk.htm#JIDF0200">JIDF0200 Format</a> in
|
||
|
<a href="qwcrjblk.htm">Retrieve Job Locks (QWCRJBLK) API</a>
|
||
|
for more information.</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
<p>Note: The Internal Job Identifier within job formats JIDF0100 and JIDF0200 is not supported by QP0LRRO at this time. If the internal job identifier is specified, CPE3440 (Operation not supported) will be returned in the error code structure.</p>
|
||
|
<p>This API is thread independent. This means QP0LRRO returns references for integrated file system objects for all threads within a specified job. Therefore the thread indicator fields in the job format structures will be ignored.</p>
|
||
|
</dd>
|
||
|
|
||
|
|
||
|
<dt><strong>Error_Code</strong></dt>
|
||
|
|
||
|
<dd>(Input/Output)
|
||
|
|
||
|
<p>Pointer to an error code structure to receive error information. See <a
|
||
|
href="../apiref/error.htm#hdrerrcod">Error code parameter</a> for more information.</p>
|
||
|
</dd>
|
||
|
</dl>
|
||
|
|
||
|
<br>
|
||
|
|
||
|
|
||
|
<h3>Authorities and Locks</h3>
|
||
|
|
||
|
<dl>
|
||
|
<dt><em>Job Authority</em></dt>
|
||
|
|
||
|
<dd>The job authority must be one of the following:
|
||
|
<ol type="1">
|
||
|
<li>The API must be called from within the job for which the information is
|
||
|
being retrieved.</li>
|
||
|
<li>The caller of the API must be running under a user profile
|
||
|
that is the same as the job user identity of the job for which the information
|
||
|
is being retrieved.</li>
|
||
|
<li>The caller of the API must be running under a user profile that
|
||
|
has job control (*JOBCTL) special authority.</li>
|
||
|
</ol>
|
||
|
<p>The <strong>job user identity</strong> is the name of the user profile by
|
||
|
which a job is known to other jobs. It is described in more detail in the
|
||
|
<a href="../rzaks/rzaks1.htm">Work Management</a> topic.</p>
|
||
|
</dd>
|
||
|
</dl>
|
||
|
<br>
|
||
|
|
||
|
|
||
|
<h3><a name="structureheader">Input Structure Formats</a></h3>
|
||
|
|
||
|
<p>The input structure formats are used to input job or thread information.
|
||
|
|
||
|
for a detailed description of this input format. See
|
||
|
<a href="qwcrjblk.htm#JIDF0100">JIDF0100 Format</a> and
|
||
|
<a href="qwcrjblk.htm#JIDF0200">JIDF0200 Format</a> in
|
||
|
<a href="qwcrjblk.htm">Retrieve Job Locks (QWCRJBLK) API</a>.</p>
|
||
|
<br>
|
||
|
<br>
|
||
|
|
||
|
<h3><a name="structureheader">Output Structure Formats</a></h3>
|
||
|
|
||
|
<h4><a name="objref2">RROO0100 Output Format Description
|
||
|
(<em>Qp0l_RROO0100_Output_T</em>)</a></h4>
|
||
|
|
||
|
<p>This output format is used to return integrated file system objects that
|
||
|
have been referenced by a specific job.</p>
|
||
|
|
||
|
<table border width="100%">
|
||
|
<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="30%">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top" width="50%">Bytes returned</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top" width="10%">4</td>
|
||
|
<td align="center" valign="top" width="10%">4</td>
|
||
|
<td align="left" valign="top" width="30%">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top" width="50%">Bytes available</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">Objects returned count</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">12</td>
|
||
|
<td align="center" valign="top">0C</td>
|
||
|
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top">Objects available count</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">16</td>
|
||
|
<td align="center" valign="top">10</td>
|
||
|
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top">Offset to objects list output structure</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">20</td>
|
||
|
<td align="center" valign="top">14</td>
|
||
|
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top">Retrieve referenced object status</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top" colspan="2">Offset determined from <em>Offset to
|
||
|
objects list output structure</em> field</td>
|
||
|
<td align="left" valign="top">Qp0l_Obj_List_Output Structure</td>
|
||
|
<td align="left" valign="top">Objects list output structure. See <a href=
|
||
|
"#objref3">Objects List Output Structure Description</a>
|
||
|
for a description of this structure. The Objects List Output structure is repeated
|
||
|
for each integrated file system object referenced by the job.</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
|
||
|
<br>
|
||
|
<br>
|
||
|
|
||
|
<h4><a name="objref3">Objects List Output Structure Description
|
||
|
(<em>Qp0l_Obj_List_Output_T</em>)</a></h4>
|
||
|
|
||
|
<p>This structure is embedded within the RROO0100 format. It is used to return
|
||
|
the list of integrated file system objects that have been referenced by a
|
||
|
specific job. This structure is repeated for each integrated file system object
|
||
|
referenced by the job.</p>
|
||
|
|
||
|
<table border width="100%">
|
||
|
<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="30%">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top" width="50%">Displacement to next object list output structure</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">Displacement to extended reference types</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">Length of extended reference types</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">12</td>
|
||
|
<td align="center" valign="top">0C</td>
|
||
|
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top">Reference count</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">16</td>
|
||
|
<td align="center" valign="top">10</td>
|
||
|
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top">Displacement to Qlg_Path_Name_T structure</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">20</td>
|
||
|
<td align="center" valign="top">14</td>
|
||
|
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top">Length of Qlg_Path_Name_T structure</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">24</td>
|
||
|
<td align="center" valign="top">18</td>
|
||
|
<td align="left" valign="top">CHAR(16)</td>
|
||
|
<td align="left" valign="top">File identifier.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">40</td>
|
||
|
<td align="center" valign="top">28</td>
|
||
|
<td align="left" valign="top">BINARY(8), UNSIGNED</td>
|
||
|
<td align="left" valign="top">File system identifier.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">48</td>
|
||
|
<td align="center" valign="top">30</td>
|
||
|
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top">File system type.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">52</td>
|
||
|
<td align="center" valign="top">34</td>
|
||
|
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top">File identifier number.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="center" valign="top">56</td>
|
||
|
<td align="center" valign="top">38</td>
|
||
|
<td align="left" valign="top">BINARY(4), UNSIGNED</td>
|
||
|
<td align="left" valign="top">Generation identifier.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top" colspan="2">Offset determined from <em>Displacement to
|
||
|
extended reference types</em> field</td>
|
||
|
<td align="left" valign="top">Qp0l_ExtRef_Types_Output_T Structure</td>
|
||
|
<td align="left" valign="top">Extended reference types structure. See <a href=
|
||
|
"#ObjTypesStruct">Extended object reference types structure description</a>
|
||
|
for a description of this structure.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top" colspan="2">Offset determined from <em>Displacement to
|
||
|
Qlg_Path_Name_T structure</em> field</td>
|
||
|
<td align="left" valign="top">Qlg_Path_Name_T Structure</td>
|
||
|
<td align="left" valign="top">Qlg path name structure. See <a href=
|
||
|
"#PathNameStruct">Qlg Path Name Structure</a>
|
||
|
for a description of this structure.</td>
|
||
|
</tr>
|
||
|
|
||
|
</table>
|
||
|
|
||
|
<br>
|
||
|
<br>
|
||
|
|
||
|
<h4><a name="PathNameStruct">Qlg Path Name Structure
|
||
|
Description (<em>Qlg_Path_Name_T</em>)</a></h4>
|
||
|
|
||
|
<p>This structure is embedded within the RROO0100 format.
|
||
|
It is an NLS-enabled Qlg_Path_Name_T format structure that contains a path name or
|
||
|
pointer to a path name of an integrated file system object that is referenced
|
||
|
by the job. For more information on the Qlg_Path_Name_T structure,
|
||
|
see <a href="../apiref/pns.htm">Path name format.</a></p>
|
||
|
|
||
|
<p>Some integrated file system objects may have multiple links. In this case the QP0LRRO API will only return a single path name to the object.</p>
|
||
|
|
||
|
<p>If the last element of the <em>path</em> is a symbolic link, QP0LRRO
|
||
|
does not resolve the contents of the symbolic link.
|
||
|
The reference information will be obtained for the symbolic link itself.</p>
|
||
|
|
||
|
<p><img src="v5r4adelta.gif" alt="Start of change">
|
||
|
The Qlg_Path_Name_T structure will have a path length of zero (0) if no path name was available to be returned.
|
||
|
A path name may not be returned under the following conditions:</p>
|
||
|
|
||
|
<ul>
|
||
|
<li>
|
||
|
The object is in the "root" (/), QOpenSys or a user-defined file system and is not linked to a directory path.</li>
|
||
|
|
||
|
<li>
|
||
|
The object is in a remote file system or the optical file system (QOPT).</li>
|
||
|
<img alt="End of change" src="v5r4adeltaend.gif">
|
||
|
</ul>
|
||
|
|
||
|
<h4><a name="ObjTypesStruct">Extended Object Reference Types Structure
|
||
|
Description (<em>Qp0l_Ext_Ref_Types_Output</em>)</a></h4>
|
||
|
|
||
|
<p>This structure is embedded within the RROO0100 format. It is used to return
|
||
|
object reference type information.</p>
|
||
|
|
||
|
<p>The Qp0l_Ext_Ref_Types_Output contains the references for the returned
|
||
|
object contained in the Qlg_Path_Name_T structure. For more information on the
|
||
|
Qp0l_Ext_Ref_Types_Output_T structure see
|
||
|
<a href="qp0lror.htm#ObjTypesStruct">Extended object reference types structure description</a> in
|
||
|
<a href="qp0lror.htm">Retrieve Object References (QP0LROR)</a> API.</p>
|
||
|
|
||
|
|
||
|
<br>
|
||
|
<br>
|
||
|
|
||
|
<h3><a name="rrooutfields">Field Descriptions for RROO0100 Output Structure and the
|
||
|
embedded structures</a></h3>
|
||
|
|
||
|
<p><strong>Bytes available.</strong> Number of bytes of output data that was
|
||
|
available to be returned.</p>
|
||
|
|
||
|
<p><strong>Bytes returned.</strong> Number of bytes returned in the output
|
||
|
buffer.</p>
|
||
|
|
||
|
<p><strong>Displacement to extended reference types.</strong> Displacement from
|
||
|
the beginning of the Objects list output structure containing this field to the
|
||
|
beginning of the Extended reference types structure.</p>
|
||
|
|
||
|
<p><strong>Displacement to next Object list output structure.</strong> Displacement from
|
||
|
the beginning of Object list output structure to the beginning of the next
|
||
|
Object list output structure. If this field is 0, then there are no more Object list output
|
||
|
structures available to be returned, or not enough space was provided to complete the next Object list output structure.</p>
|
||
|
|
||
|
<p><strong>Displacement to Qlg_Path_Name_T structure.</strong> Displacement from
|
||
|
the beginning of the Object list output structure containing this field to the beginning of the
|
||
|
Qlg_Path_Name_T structure. </p>
|
||
|
|
||
|
<p><strong>Extended reference types structure.</strong> This is a
|
||
|
Qp0l_Ext_Ref_Types_Output_T structure containing fields that indicate different
|
||
|
types of references that may be held on an object. For more information on the
|
||
|
Qp0l_Ext_Ref_Types_Output_T structure see <a href="qp0lror.htm#ObjTypesStruct">Extended object reference types structure description</a> in
|
||
|
<a href="qp0lror.htm">Retrieve Object References (QP0LROR)</a> API.</p>
|
||
|
|
||
|
<p><strong>File identifier.</strong> 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 from
|
||
|
some file systems.
|
||
|
The file identifier is defined in header file Qp0lstdi.h as data type Qp0lFID_t.</p>
|
||
|
|
||
|
<p><strong>File identifier number.</strong> The file identifier number of the object. This
|
||
|
number uniquely identifies the object within a file system. When the file identifier number, generation identifier and file system identifier are used together, they uniquely identify the object on the system.</p>
|
||
|
|
||
|
<p><strong>File system identifier.</strong> The file system ID to which the object belongs.
|
||
|
This number uniquely identifies the file system to which the object belongs.
|
||
|
When the file identifier number, generation identifier and file system identifier are used together, they uniquely identify the object on the system. </p>
|
||
|
|
||
|
<p><strong>File system type.</strong> An integer representation of the file system the object belongs. The file system type may be one of the following values. </p>
|
||
|
|
||
|
<table cellpadding="5">
|
||
|
<!-- cols="5 95" -->
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>0</em></td>
|
||
|
<td align="left" valign="top">QP0L_ROOT_FS: The "root" (/) file system </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>1</em></td>
|
||
|
<td align="left" valign="top">QP0L_QOPENSYS_FS: The QOpenSys file system. </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>2</em></td>
|
||
|
<td align="left" valign="top">QP0L_UDFS_FS: A user-defined file system. </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>3</em></td>
|
||
|
<td align="left" valign="top">QP0L_UDFS_MANAGEMENT_FS: A file system that manages the block special files (*BLKSF) for the user-defined file systems. </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>4</em></td>
|
||
|
<td align="left" valign="top">QP0L_QSYS_FS: The QSYS.LIB file system. </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>5</em></td>
|
||
|
<td align="left" valign="top">QP0L_IASPQSYS_FS: An independent ASP QSYS.LIB file system. </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>6</em></td>
|
||
|
<td align="left" valign="top">QP0L_QDLS_FS: The QDLS file system. </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>7</em></td>
|
||
|
<td align="left" valign="top">QP0L_NFS_FS: The Network File System (NFS). </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>8</em></td>
|
||
|
<td align="left" valign="top">QP0L_QNETWARE_FS: The QNetWare file system. </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>9</em></td>
|
||
|
<td align="left" valign="top">QP0L_QOPT_FS: The optical file system (QOPT). </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>10</em></td>
|
||
|
<td align="left" valign="top">QP0L_QFILSVR400_FS: The QFileSvr.400 file system. </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>11</em></td>
|
||
|
<td align="left" valign="top">QP0L_QNTC_FS: The Windows NT Server file system. </td>
|
||
|
</tr>
|
||
|
|
||
|
</table>
|
||
|
|
||
|
|
||
|
<p><strong>Generation identifier.</strong> The generation identifier associated with the
|
||
|
object. When the file identifier number, generation identifier and file system identifier are used together, they uniquely identify the object on the system.</p>
|
||
|
|
||
|
<p><strong>Length of extended reference types.</strong> Length of the Extended
|
||
|
reference types information.</p>
|
||
|
|
||
|
<p><strong>Length of Qlg_Path_Name structure.</strong> Length of the Qlg_Path_Name
|
||
|
structure.</p>
|
||
|
|
||
|
<p><strong>Objects returned count.</strong> The number of integrated file system objects that are returned in the Objects list output structure. The number of objects returned is limited by the amount of space allocated to receive the list of objects.</p>
|
||
|
|
||
|
<p><strong>Objects available count.</strong> The number of integrated file system objects that are available to be returned in the Objects list output structure. This value may be larger than the value in the Objects returned count.</p>
|
||
|
|
||
|
<p><strong>Offset to objects list output structure.</strong> Offset from the
|
||
|
beginning of the <em>Receiver_Variable</em> to the beginning of the Objects list output
|
||
|
structure. If this field is 0, then no integrated file system
|
||
|
objects were available to be returned, or not enough space was provided to complete an
|
||
|
Objects list output structure.</p>
|
||
|
|
||
|
<p><strong>Qlg Path Name structure.</strong> An NLS enabled Qlg_Path_Name_T format structure that
|
||
|
contains a path name of an integrated file system object that is referenced by the job.</p>
|
||
|
|
||
|
<p><strong>Reference count.</strong> Current number of references on the
|
||
|
object for the specified job. </p>
|
||
|
|
||
|
<p><strong>Retrieve referenced object status.</strong> An integer space to return potential error conditions back to the caller that may have been ignored by the QP0LRRO() API. The following feedback conditions may be returned (NOTE: If non-zero, this condition value may indicate more than one error condition):</p>
|
||
|
|
||
|
<table cellpadding="5">
|
||
|
<!-- cols="15 85" -->
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>0x00000000 (Hex)</em></td>
|
||
|
<td align="left" valign="top">QP0L_NO_ERROR: No errors were encountered that were ignored
|
||
|
by QP0LRRO API.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>0x00000001 (Hex)</em></td>
|
||
|
<td align="left" valign="top">QP0L_ERROR: An error was encountered while retrieving
|
||
|
referenced objects. Not all referenced objects were returned. The job log will contain a diagnostic message that was sent by the job. </td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top"><em>0x00000002 (Hex)</em></td>
|
||
|
<td align="left" valign="top">QP0L_SPACE_ERROR: An error was encountered while trying to allocate space to retrieve all referenced objects. Not all referenced objects were returned. Additionally, the Bytes available value that is returned will not be the correct number of bytes available. Instead, it will contain the maximum number of bytes available that the API was able to determine prior to the space allocation failure. </td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
|
||
|
|
||
|
<br>
|
||
|
<br>
|
||
|
|
||
|
|
||
|
<h3>Error Messages</h3>
|
||
|
|
||
|
<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">CPE3440 E</td>
|
||
|
<td align="left" valign="top">Operation not supported.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF3C21 E</td>
|
||
|
<td align="left" valign="top">Format name &1 is not correct.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF3C24 E</td>
|
||
|
<td align="left" valign="top">Length of the receiver variable is not
|
||
|
valid.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF3C36 E</td>
|
||
|
<td align="left" valign="top">Number of parameters, &1, entered for this
|
||
|
API was not valid.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF3C3C E</td>
|
||
|
<td align="left" valign="top">Value for parameter &1 not valid.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF3C53 E</td>
|
||
|
<td align="left" valign="top">Job &3/&2/&1 not found.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF3C55 E</td>
|
||
|
<td align="left" valign="top">Job &3/&2/&1 does not exist.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF3C57 E</td>
|
||
|
<td align="left" valign="top">Not authorized to retrieve job information.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF3C59 E</td>
|
||
|
<td align="left" valign="top">Internal identifier is not blanks and job name is not *INT.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF3CF1 E</td>
|
||
|
<td align="left" valign="top">Error code parameter not valid.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF3CF2 E</td>
|
||
|
<td align="left" valign="top">Error(s) occurred during running of &1 API.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPF9872 E</td>
|
||
|
<td align="left" valign="top">Program or service program &1 in library
|
||
|
&2 ended. Reason code &3.</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td align="left" valign="top">CPFA0D4 E</td>
|
||
|
<td align="left" valign="top">File system error occurred. Error number
|
||
|
&1.</td>
|
||
|
</tr>
|
||
|
|
||
|
</table>
|
||
|
|
||
|
<br>
|
||
|
<h3><a name="usage">Usage Notes</a></h3>
|
||
|
|
||
|
<ol type="1">
|
||
|
<li>The QP0LRRO API will return references for the file systems whose types are
|
||
|
listed above in the <strong>file system type</strong> definition.<br><br>
|
||
|
</li>
|
||
|
|
||
|
<li>The list of objects returned in the RROO0100 output format may be
|
||
|
incomplete for objects residing in file systems other than the "root" (/),
|
||
|
QOpenSys, and user-defined file systems. Objects in some of the other file
|
||
|
systems can be locked with interfaces that do not use the integrated file
|
||
|
system. Therefore, objects referenced by a job will only have references that
|
||
|
were obtained as part of an integrated file system operation, or an operation
|
||
|
that causes an integrated file system operation to occur.<br><br></li>
|
||
|
|
||
|
<li>Jobs using file systems that access remote objects, such as Network File
|
||
|
System (NFS) and the QFileSvr.400 file systems, will only be returning object
|
||
|
references that are locally obtained. Any remote object references held by the
|
||
|
job are not returned by this API.<br><br></li>
|
||
|
|
||
|
<li>Since the output format is variable length, the following is recommended
|
||
|
for obtaining a minimum output buffer size to receive the information:<br><br>
|
||
|
|
||
|
|
||
|
<ul>
|
||
|
<li>RROO0100: Programs may consider first calling QP0LRRO and specifying the
|
||
|
minimum eight bytes for the input Length_Of_Receiver_Variable and assigning a
|
||
|
space of at least eight bytes to the output Receiver_Variable. QP0LRRO will
|
||
|
then return the number of bytes required for this operation in the bytes
|
||
|
available field in output structure RROO0100. The program could then allocate a
|
||
|
buffer equal in size to the returned value in bytes available.
|
||
|
|
||
|
<p>The number of referenced objects for a particular job may change between
|
||
|
multiple calls to this API. Therefore, the output buffer size for a RROO0100
|
||
|
format may not be enough space under all conditions.</p>
|
||
|
</li>
|
||
|
|
||
|
<li>If not enough is space provided to receive a complete list of object
|
||
|
information, then only those object entries that completely fit in the buffer
|
||
|
will be returned. The RROO0100 output structure contains a field called <em>
|
||
|
Object available count</em> that will always contain the total number of
|
||
|
integrated file system objects that were available for returning to the caller
|
||
|
at that instance in time.<br>
|
||
|
<br>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
|
||
|
<li>This API will only capture the object references at an instant in time. By
|
||
|
the time this API has completed and returns to the caller, the reference
|
||
|
information may already be out of date. This behavior is characteristic of this
|
||
|
type of interface.<br><br></li>
|
||
|
|
||
|
<li>There are some reference types that are obtained on an object without
|
||
|
incrementing the object's reference count. This could result in an object not
|
||
|
being returned by this API for a job even though that job is holding a lock on
|
||
|
that object.
|
||
|
|
||
|
<p>For example: At some instances during the save or restore of an integrated
|
||
|
file system object, the job may have references on an object even though its
|
||
|
reference count is zero.</p>
|
||
|
</li>
|
||
|
|
||
|
<li>Under some circumstances, the list of objects that are referenced by a job
|
||
|
may be incomplete. Some system programs obtain object references directly on an
|
||
|
object without obtaining an open descriptor for the object.<br><br>
|
||
|
</li>
|
||
|
|
||
|
<!-- COMMENT out the QDLS statement. We currently aren't going to encounter
|
||
|
this anymore, but keep around in case this changes again.
|
||
|
<li>For jobs referencing the QDLS file system, the jobs user profile must be
|
||
|
enrolled in the system distribution directory. If QDLS file system objects are
|
||
|
referenced by a job and the jobs user profile is not enrolled in the system
|
||
|
distribution directory; those objects will not be returned and message CPE3498
|
||
|
"User not enrolled in system distribution directory." will be returned in the
|
||
|
users job log. The retrieve referenced object status filed will also be set to
|
||
|
QP0L_ERROR.<br><br>
|
||
|
</li>
|
||
|
-->
|
||
|
|
||
|
<li>This type of reference information can also be viewed through the iSeries
|
||
|
Navigator application. The terminology, however, differs in that iSeries
|
||
|
Navigator refers to this type of information as "Usage" information instead of
|
||
|
"Reference" information.</li>
|
||
|
</ol>
|
||
|
|
||
|
<br>
|
||
|
<h3>Related Information</h3>
|
||
|
|
||
|
<ul>
|
||
|
<li>The <strong><qp0lrro.h></strong> file (see <a href="unix13.htm">
|
||
|
Header Files for UNIX-Type Functions</a>)</li>
|
||
|
<li>The <strong><qp0lror.h></strong> file (see <a href="unix13.htm">
|
||
|
Header Files for UNIX-Type Functions</a>)</li>
|
||
|
<li>The <strong><qlg.h></strong> file (see <a href="unix13.htm">
|
||
|
Header Files for UNIX-Type Functions</a>)</li>
|
||
|
<li><a href="qwcrjblk.htm">Retrieve Job Locks API (QWCRJBLK) API</a> </li>
|
||
|
<li><a href="qp0lror.htm">Retrieve Object References (QP0LROR) API</a> </li>
|
||
|
</ul>
|
||
|
<br>
|
||
|
|
||
|
|
||
|
<h3>Example</h3>
|
||
|
|
||
|
<p>The following is an example use of this API.</p>
|
||
|
|
||
|
<p>See <a href="../apiref/aboutapis.htm#codedisclaimer">Code disclaimer information</a>
|
||
|
for information pertaining to code examples.</p>
|
||
|
|
||
|
|
||
|
<pre>
|
||
|
#include <qp0lrro.h>
|
||
|
#include <qp0wpid.h>
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <iconv.h>
|
||
|
#include <qtqiconv.h>
|
||
|
#include <errno.h>
|
||
|
|
||
|
/* Function convertData for converting a National Language Support */
|
||
|
/* path name */
|
||
|
int convertData(int in_ccsid,
|
||
|
int out_ccsid,
|
||
|
char *in_buf,
|
||
|
char *out_buf,
|
||
|
size_t *in_bytes_left,
|
||
|
size_t *out_bytes_left)
|
||
|
{
|
||
|
|
||
|
QtqCode_T from_code =
|
||
|
{
|
||
|
0, /* input CCSID. */
|
||
|
0, /* (conversion alternative)
|
||
|
IBM default conversion. */
|
||
|
0, /* (substitution alternative)
|
||
|
do not return substitution
|
||
|
count. */
|
||
|
0, /* (shift-state alternative)
|
||
|
conv descriptor is not
|
||
|
returned to initial shift
|
||
|
state. */
|
||
|
0, /* (input length option) valid
|
||
|
inbytesleft required.
|
||
|
(input/output are NOT
|
||
|
null-terminated) */
|
||
|
0 /* (error option for mixed data)
|
||
|
No mixed byte errors. */
|
||
|
};
|
||
|
|
||
|
QtqCode_T to_code =
|
||
|
{
|
||
|
0, /* output CCSID. */
|
||
|
0, /* ignored on output */
|
||
|
0, /* ignored on output */
|
||
|
0, /* ignored on output */
|
||
|
0, /* ignored on output */
|
||
|
0 /* ignored on output */
|
||
|
};
|
||
|
|
||
|
iconv_t cd; /* conversion descriptor. */
|
||
|
|
||
|
/* Set the to and from ccsids. */
|
||
|
from_code.CCSID = in_ccsid;
|
||
|
to_code.CCSID = out_ccsid;
|
||
|
|
||
|
errno = 0;
|
||
|
|
||
|
/* Call code conversion allocation API to get a conversion */
|
||
|
/* descriptor. */
|
||
|
cd = QtqIconvOpen(&to_code, &from_code);
|
||
|
|
||
|
/* verify conversion descriptor */
|
||
|
if ( cd.return_value == -1 )
|
||
|
{
|
||
|
printf("ERROR: iconv_open failed (errno=%d).",
|
||
|
errno);
|
||
|
return(-1);
|
||
|
}
|
||
|
|
||
|
/* Do the conversion. */
|
||
|
if ( iconv(cd,
|
||
|
&in_buf,
|
||
|
in_bytes_left,
|
||
|
&out_buf,
|
||
|
out_bytes_left) == -1 )
|
||
|
{
|
||
|
printf("ERROR: iconv failed (errno=%d).",
|
||
|
errno);
|
||
|
printf("The input ccsid=%d, and the output ccsid=%d.",
|
||
|
in_ccsid, out_ccsid);
|
||
|
printf("The input data=%s.\n", in_buf);
|
||
|
return(-1);
|
||
|
}
|
||
|
|
||
|
/* Close the conversion descriptor. */
|
||
|
if ( iconv_close(cd) == -1 )
|
||
|
{
|
||
|
printf("ERROR: iconv_close failed (errno=%d).",
|
||
|
errno);
|
||
|
return(-1);
|
||
|
}
|
||
|
|
||
|
return(0);
|
||
|
|
||
|
} /* end convertData */
|
||
|
|
||
|
/*************************/
|
||
|
/* Start of main program */
|
||
|
/*************************/
|
||
|
void main()
|
||
|
{
|
||
|
|
||
|
/* Define a Path name structure */
|
||
|
struct PathNameStruct
|
||
|
{
|
||
|
Qlg_Path_Name_T pn_header;
|
||
|
char pn[500];
|
||
|
};
|
||
|
|
||
|
struct PathNameStruct *pathP;
|
||
|
|
||
|
char path_buffer[500]; /* buffer to receive a converted
|
||
|
path name */
|
||
|
size_t out_bytes; /* path buffer size */
|
||
|
|
||
|
Qus_EC_t errorCode;
|
||
|
|
||
|
/* Define an input job structure */
|
||
|
struct myjob100_struct
|
||
|
{
|
||
|
char Job_Name[10];
|
||
|
char User_Name[10];
|
||
|
char Job_Number[6];
|
||
|
char Int_Job_ID[16];
|
||
|
char Reserved[2];
|
||
|
int Thread_Indicator;
|
||
|
char Thread_Id[8];
|
||
|
}myjob100_struct_t;
|
||
|
|
||
|
char output_format[8]; /* declare an output format variable */
|
||
|
|
||
|
unsigned outputBufSize; /* Declare an output buffer size
|
||
|
variable */
|
||
|
|
||
|
/* declare a pointer fro retrieving the Object list output */
|
||
|
Qp0l_Obj_List_Output_T *Obj_ListP;
|
||
|
|
||
|
/* Declare a pointer for retrieving the RROO0100 format. */
|
||
|
Qp0l_RROO0100_Output_T *output100P;
|
||
|
|
||
|
/* Declare a job pointer. */
|
||
|
struct QP0W_Job_ID_T jobP;
|
||
|
struct myjob100_struct Job_ID;
|
||
|
|
||
|
char job_format[8]; /* declare a job format variable. */
|
||
|
|
||
|
/* Declare a process ID */
|
||
|
pid_t Process_ID = 0; /* zero = current process */
|
||
|
|
||
|
/*********************************************************/
|
||
|
/* Define a constant for the number of output buffer */
|
||
|
/* bytes provided for the RROO0100 format. */
|
||
|
/*********************************************************/
|
||
|
outputBufSize = \
|
||
|
(sizeof(Qp0l_RROO0100_Output_T) + \
|
||
|
sizeof(Qp0l_Obj_List_Output_T) + \
|
||
|
sizeof(Qlg_Path_Name_T) + \
|
||
|
sizeof(Qp0l_Ext_Ref_Types_Output_T) + \
|
||
|
5000); /* Pad space for the returned path
|
||
|
name */
|
||
|
|
||
|
/*************************************/
|
||
|
/* Get the job ID of the current job */
|
||
|
/*************************************/
|
||
|
int rv = Qp0wGetJobID(Process_ID, &jobP);
|
||
|
if(rv != 0)
|
||
|
{
|
||
|
printf("Error occurred for Qp0lGetJobID.\n");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
/*********************************************************/
|
||
|
/* Set the Qp0l_RROI0100 information from the Process_ID */
|
||
|
/*********************************************************/
|
||
|
memset(&Job_ID, 0x00, sizeof(Job_ID));
|
||
|
memcpy(Job_ID.Job_Name, jobP.jobname, sizeof(Job_ID.Job_Name));
|
||
|
memcpy(Job_ID.User_Name, jobP.username, sizeof(Job_ID.User_Name));
|
||
|
memcpy(Job_ID.Job_Number, jobP.jobnumber, sizeof(Job_ID.Job_Number));
|
||
|
memset(Job_ID.Int_Job_ID, 0x40, sizeof(Job_ID.Int_Job_ID));
|
||
|
|
||
|
/*********************************************************/
|
||
|
/* Setup the error code structure to cause the error to */
|
||
|
/* be returned within the error structure. */
|
||
|
/*********************************************************/
|
||
|
errorCode.Bytes_Provided = sizeof(errorCode);
|
||
|
errorCode.Bytes_Available = 0;
|
||
|
|
||
|
/****************************************************/
|
||
|
/* Allocate space to receive output from QP0LRRO */
|
||
|
/****************************************************/
|
||
|
if (NULL == (output100P = (Qp0l_RROO0100_Output_T *)
|
||
|
malloc(outputBufSize)))
|
||
|
{
|
||
|
printf("No space available.\n");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
/****************************************************/
|
||
|
/* Clear the allocated space */
|
||
|
/****************************************************/
|
||
|
memset(output100P, 0x00, outputBufSize);
|
||
|
|
||
|
/****************************************************/
|
||
|
/* set output format and job format */
|
||
|
/****************************************************/
|
||
|
memcpy(output_format,
|
||
|
QP0LRRO_RROO0100_FORMAT,
|
||
|
sizeof(output_format));
|
||
|
memcpy(job_format,
|
||
|
QP0LRRO_RROI0100_FORMAT,
|
||
|
sizeof(job_format));
|
||
|
|
||
|
/*********************************************************/
|
||
|
/* Call QP0LRRO. We will compare the number of bytes */
|
||
|
/* to the number of bytes available to allocate more */
|
||
|
/* space if required */
|
||
|
/*********************************************************/
|
||
|
QP0LRRO(output100P,
|
||
|
outputBufSize,
|
||
|
output_format,
|
||
|
&Job_ID,
|
||
|
job_format,
|
||
|
&errorCode);
|
||
|
|
||
|
/* Check if an error occurred. */
|
||
|
if (errorCode.Bytes_Available != 0)
|
||
|
{
|
||
|
printf("Error occurred for RROO0100.\n");
|
||
|
free(output100P); /* free space */
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
/************************************************************/
|
||
|
/* If there was more information available than we had */
|
||
|
/* provided receiver space for, then we will allocate a */
|
||
|
/* larger buffer and try once again. This could potentially*/
|
||
|
/* keep re-occurring, but this example will stop after this */
|
||
|
/* second retry. */
|
||
|
/************************************************************/
|
||
|
if (output100P->BytesReturned < output100P->BytesAvailable)
|
||
|
{
|
||
|
/*********************************************************/
|
||
|
/* Use the bytes available value to determine how much */
|
||
|
/* more buffer size is needed. We will pad it with an */
|
||
|
/* extra 1000 bytes to try and handle more jobs obtaining*/
|
||
|
/* references between calls to QP0LRRO. */
|
||
|
/*********************************************************/
|
||
|
outputBufSize = output100P->BytesAvailable + 1000;
|
||
|
|
||
|
/* reallocate more space to output100P */
|
||
|
output100P = (Qp0l_RROO0100_Output_T *)(realloc((void *)output100P,
|
||
|
outputBufSize));
|
||
|
|
||
|
if (output100P ==NULL)
|
||
|
{
|
||
|
printf("No space available.\n");
|
||
|
free(output100P); /* free space */
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
QP0LRRO(output100P,
|
||
|
outputBufSize,
|
||
|
output_format,
|
||
|
&Job_ID,
|
||
|
job_format,
|
||
|
&errorCode);
|
||
|
|
||
|
/* Check if an error occurred. */
|
||
|
if (errorCode.Bytes_Available != 0)
|
||
|
{
|
||
|
free(output100P);
|
||
|
printf("Error occurred for RROO0100 (2nd call).\n");
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/***************************************************/
|
||
|
/* Check if we received any objects that might be */
|
||
|
/* associated with a job. If not, return. */
|
||
|
/***************************************************/
|
||
|
if (output100P->ObjectsReturned == 0)
|
||
|
{
|
||
|
printf("QP0LRRO returned an object count of: %d\n",
|
||
|
output100P->ObjectsReturned);
|
||
|
printf("Number of objects available: %d\n",
|
||
|
output100P->ObjectsAvailable);
|
||
|
free(output100P);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
printf("Number of objects referenced by the job: %d\n",
|
||
|
output100P->ObjectsReturned);
|
||
|
printf("Number of objects available: %d\n",
|
||
|
output100P->ObjectsAvailable);
|
||
|
printf("Paths referenced by the current job:\n");
|
||
|
|
||
|
/* Get a pointer to the object list structure */
|
||
|
Obj_ListP = (Qp0l_Obj_List_Output_T *)((char *)output100P + output100P->ObjListOffset);
|
||
|
|
||
|
/* Loop through the output buffer and return the path names */
|
||
|
for(int i = 0; i < output100P->ObjectsReturned; i++)
|
||
|
{
|
||
|
/* Get a pointer to the Qlg_Path_Name structure */
|
||
|
pathP = (PathNameStruct *)((char *)Obj_ListP + Obj_ListP->PathDisp);
|
||
|
|
||
|
/* clear the returned path buffer */
|
||
|
memset(path_buffer, 0x00, sizeof(path_buffer));
|
||
|
out_bytes = sizeof(path_buffer); /* get size of path buffer */
|
||
|
|
||
|
/**********************************************/
|
||
|
/* convert the returned object from the ccsid */
|
||
|
/* in the Qlg path structure to the jobccsid */
|
||
|
/**********************************************/
|
||
|
convertData(pathP->pn_header.CCSID,
|
||
|
0,
|
||
|
pathP->pn,
|
||
|
path_buffer,
|
||
|
(size_t *)&pathP->pn_header.Path_Length,
|
||
|
(size_t *)&out_bytes);
|
||
|
|
||
|
/* print the path name */
|
||
|
printf(" %s\n",path_buffer);
|
||
|
|
||
|
/* increment to next list entry */
|
||
|
Obj_ListP = (Qp0l_Obj_List_Output_T *)((char *)Obj_ListP + Obj_ListP->NextListEntryDisp);
|
||
|
}
|
||
|
|
||
|
free(output100P);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
</pre>
|
||
|
|
||
|
<p><strong>Example Output:</strong></p>
|
||
|
|
||
|
<pre>Number of objects referenced by the job: 3
|
||
|
Number of objects available: 3
|
||
|
Paths referenced by the current job:
|
||
|
/
|
||
|
/home/myprofile
|
||
|
/mydir/mystmf1
|
||
|
|
||
|
</pre>
|
||
|
|
||
|
<hr>
|
||
|
API introduced: V5R3
|
||
|
|
||
|
<hr>
|
||
|
<table align="center" 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>
|
||
|
</body>
|
||
|
</html>
|
||
|
|