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

1174 lines
30 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>Qp0lRenameUnlink()--Rename File or Directory, Unlink "new" If It
Exists</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 -->
<!-- Unix2 SCRIPT J converted by B2H R4.1 (346) (CMS) by V2KEA304 -->
<!-- at RCHVMW2 on 17 Feb 1999 at 11:05:09 -->
<!-- Change History: -->
<!-- 010320 JTROUS Include Journal ERRNOs, should have in V5R1 -->
<!-- 010503 JTROUS Add new Usage note, V5R2a, 98761 -->
<!-- 011022 JTROUS Changes from API Review 1, V5R2 -->
<!-- 020131 JTROUS Changes from API Review 3, V5R2 -->
<!-- 020524 VONBERGE Updated QSYS.LIB authorities table -->
<!-- 020618 EMIG: updated for NFS threadsafety, V5R3 -->
<!-- 0206?? JET This file has undergone html cleanup -->
<!-- 020719 MFENLON: updated for QFileSvr.400 threadsafety, V5R3 -->
<!-- 020829 RTHEIS : S_ISVTX mode bit, V5R3 -->
<!-- 021216 JTROUS : Add EDATALINK errno,usage note, V5R3 -->
<!-- 050406 JTROUS: fix enums, no change flag, V5R4 -->
<!--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>Qp0lRenameUnlink()--Rename File or Directory, Unlink
"new" If It Exists</h2>
<div class="box" style="width: 60%;">
<br>
&nbsp;&nbsp;Syntax<br>
<pre>
#include &lt;Qp0lstdi.h&gt;
int Qp0lRenameUnlink(const char <em>*old</em>, const char <em>*new</em>);
</pre>
&nbsp;&nbsp;Service Program Name: QP0LLIB1<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: Conditional; see <a href="#HDRrnmunUS">Usage
Notes</a>.<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The <strong>Qp0lRenameUnlink()</strong> function renames a file or a
directory specified by <em>old</em> to the name given by <em>new</em>. The <em>
old</em> pointer must specify the name of an existing file or directory. Both
<em>old</em> and <em>new</em> must be of the same type; that is, both
directories or both files. The last element of <em>old</em> and <em>new</em> must not
be "dot" (.) or "dot-dot" (..).</p>
<p>If <em>new</em> already exists, it is removed before <em>old</em> is renamed
to <em>new</em>. Therefore, if <em>new</em> specifies the name of an existing
directory, the directory must be empty.</p>
<p>If the <em>old</em> argument points to a symbolic link, the symbolic link is
renamed. If the <em>new</em> argument points to a symbolic link, the link is
removed and <em>old</em> is renamed to <em>new</em>. <strong>
Qp0lRenameUnlink()</strong> does not affect any file or directory named by the
contents of the symbolic link.</p>
<p>If <em>old</em> and <em>new</em> both refer to the same file, <strong>
Qp0lRenameUnlink()</strong> returns successfully and performs no other action.
See <a href="#HDRrnmunUS">Usage Notes</a> for more information.</p>
<p>When <strong>Qp0lRenameUnlink()</strong> is successful, it updates the
change and modification times for the parent directories of <em>old</em> and
<em>new</em>.</p>
<p>If the <em>old</em> object is checked out, <strong>
Qp0lRenameUnlink()</strong> fails with the [EBUSY] error.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong><em>old</em></strong></dt>
<dd>(Input) A pointer to the null-terminated path name of the file to be
renamed.
<p>This parameter is assumed to be represented in the CCSID (coded character
set identifier) currently in effect for the job. If the CCSID of the job is
65535, this parameter is assumed to be represented in the default CCSID of the
job.</p>
<p>See <a href="renameunu.htm">QlgRenameUnlink()--Rename File or Directory,
Unlink "new" If It Exists (using NLS-enabled path name)</a> for a description
and an example of supplying the <em>old</em> in any CCSID.</p>
<br>
</dd>
<dt><strong><em>new</em></strong></dt>
<dd>(Input) A pointer to the null-terminated path name of the new name of the
file.
<p>This parameter is assumed to be represented in the CCSID currently in effect
for the job. If the CCSID of the job is 65535, this parameter is assumed to be
represented in the default CCSID of the job.</p>
<p>The new file name is assumed to be represented in the language and country
or region currently in effect for the process.</p>
<p>See <a href="renameunu.htm">QlgRenameUnlink()--Rename File or Directory,
Unlink "new" If It Exists (using NLS-enabled path name)</a> for a description
and an example of supplying the <em>new</em> in any CCSID.</p>
</dd>
</dl>
<br>
<h3>Authorities</h3>
<p><strong>Note:</strong> Adopted authority is not used.</p>
<p><strong><a name="TBLARNMUN">Authorization Required for Qp0lRenameUnlink()
(excluding QSYS.LIB, independent ASP QSYS.LIB, QDLS, and QOPT)</a></strong></p>
<table border width="100%">
<!-- cols="60 20 20" -->
<tr>
<th align="left" valign="bottom">Object Referred to</th>
<th align="left" valign="bottom">Authority Required</th>
<th align="left" valign="bottom">errno</th>
</tr>
<tr>
<td align="left" valign="top" >Each directory in <em>old</em> path
name preceding the object to be renamed</td>
<td align="left" valign="top">*X</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Parent directory of <em>old</em>
object</td>
<td align="left" valign="top">*WX</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" ><em>old</em> object if it is a
directory</td>
<td align="left" valign="top">*OBJMGT + *W</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" ><em>old</em> object if it is not a
directory</td>
<td align="left" valign="top">*OBJMGT</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Each directory in <em>new</em> path
name preceding the object</td>
<td align="left" valign="top">*X</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Parent directory of <em>new</em>
object</td>
<td align="left" valign="top">*WX</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" ><em>New</em> object, if it
exists</td>
<td align="left" valign="top">*OBJEXIST</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Parent directory of the
<em>old</em> object has the S_ISVTX mode bit set to binary one (see <b>Note</b>).</td>
<td align="left" valign="top">*ALLOBJ, or owner of the <em>old</em>
object, or owner of the parent directory of the <em>old</em> object</td>
<td align="left" valign="top">EPERM</td>
</tr>
<tr>
<td align="left" valign="top" >Parent directory of the
<em>new</em> object, if it exists, has the S_ISVTX mode bit set to binary one (see <b>Note</b>).</td>
<td align="left" valign="top">*ALLOBJ, or owner of the <em>new</em>
object, or owner of the parent directory of the <em>new</em> object</td>
<td align="left" valign="top">EPERM</td>
</tr>
<tr>
<td align="left" valign="top" width="100%"><b>Note:</b> The S_ISVTX mode bit
(which is equivalent to the 'Restricted rename and unlink' object attribute)
restriction only applies to objects in the "root" (/), QOpenSys, and user-defined file systems.
</td>
</tr>
</table>
<br>
<p><strong><a name="TBLARNMUN2">Authorization Required for Qp0lRenameUnlink()
in the QSYS.LIB and independent ASP QSYS.LIB File Systems</a></strong></p>
<table border width="100%">
<!-- cols="60 20 20" -->
<tr>
<th align="left" valign="bottom">Object Referred to</th>
<th align="left" valign="bottom">Authority Required</th>
<th align="left" valign="bottom">errno</th>
</tr>
<tr>
<td align="left" valign="top" >Each directory in <em>old</em> path
name preceding the object to be renamed</td>
<td align="left" valign="top">*X</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Parent directory of <em>old</em>
object if the object is a database file member</td>
<td align="left" valign="top">*OBJMGT</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Parent directory of the parent
directory of <em>old</em> object if the object is a database file member</td>
<td align="left" valign="top">*UPD</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Parent directory of <em>old</em>
object if the object is not a database file member</td>
<td align="left" valign="top">*RWX</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" ><em>old</em> object if it is a
database file member</td>
<td align="left" valign="top">None</td>
<td align="left" valign="top">None</td>
</tr>
<tr>
<td align="left" valign="top" ><em>old</em> object if it is not a
database file member</td>
<td align="left" valign="top">*OBJMGT, Ownership required if <em>
new</em> object already exists</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" ><em>old</em> object if it is a *FILE
object type</td>
<td align="left" valign="top">*OBJMGT, *OBJOPR, Ownership required
if <em>new</em> object already exists</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Each directory in <em>new</em> path
name preceding the object</td>
<td align="left" valign="top">*X</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Parent directory of <em>new</em>
object if object is not a database file member</td>
<td align="left" valign="top">*RWX</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" ><em>new</em> object if object already
exists and is not a database file member, *PGM, *MENU, *FILE, *LIB, or *SBSD
object type</td>
<td align="left" valign="top">*OBJEXIST, *OBJMGT</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" ><em>new</em> object if object already
exists and is a *PGM object type</td>
<td align="left" valign="top">*OBJEXIST, *OBJMGT, *READ</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" ><em>new</em> object if object already
exists and is a *MENU or *FILE object type</td>
<td align="left" valign="top">*OBJEXIST, *OBJOPR</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" ><em>new</em> object if object already
exists and is a *LIB or *SBSD object type</td>
<td align="left" valign="top">*OBJEXIST, *OBJMGT, *RX</td>
<td align="left" valign="top">EACCES</td>
</tr>
</table>
<br>
<p><strong><a name="TBLARNMUN3">Authorization Required for Qp0lRenameUnlink()
in the QDLS File System</a></strong></p>
<table border width="100%">
<!-- cols="60 20 20" -->
<tr>
<th align="left" valign="bottom">Object Referred to</th>
<th align="left" valign="bottom">Authority Required</th>
<th align="left" valign="bottom">errno</th>
</tr>
<tr>
<td align="left" valign="top" >Each directory in <em>old</em> path
name preceding the object to be renamed</td>
<td align="left" valign="top">*X</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Parent directory of <em>old</em>
object</td>
<td align="left" valign="top">*CHANGE</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" ><em>old</em> object</td>
<td align="left" valign="top">*ALL</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Each directory in <em>new</em> path
name preceding the object</td>
<td align="left" valign="top">*X</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Parent directory of <em>new</em>
object</td>
<td align="left" valign="top">*CHANGE</td>
<td align="left" valign="top">EACCES</td>
</tr>
</table>
<br>
<p><strong><a name="TBLARNMUN4">Authorization Required for Qp0lRenameUnlink()
in the QOPT File System</a></strong></p>
<table border width="100%">
<!-- cols="60 20 20" -->
<tr>
<th align="left" valign="bottom">Object Referred to</th>
<th align="left" valign="bottom">Authority Required</th>
<th align="left" valign="bottom">errno</th>
</tr>
<tr>
<td align="left" valign="top" >Volume to be renamed</td>
<td align="left" valign="top">*ALL</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Volume containing object to be
renamed</td>
<td align="left" valign="top">*CHANGE</td>
<td align="left" valign="top">EACCES</td>
</tr>
<tr>
<td align="left" valign="top" >Object within volume</td>
<td align="left" valign="top">None</td>
<td align="left" valign="top">None</td>
</tr>
</table>
<br>
<h3>Return Value</h3>
<dl compact>
<dt><em>0</em></dt>
<dd><strong>Qp0lRenameUnlink()</strong> was successful.</dd>
<dt><em>-1</em></dt>
<dd><strong>Qp0lRenameUnlink()</strong> was not successful. The <em>errno</em>
global variable is set to indicate the error.</dd>
</dl>
<br>
<h3>Error Conditions</h3>
<p>If <strong>Qp0lRenameUnlink()</strong> is not successful, <em>errno</em>
usually indicates one of the following errors. Under some conditions, <em>
errno</em> could indicate an error other than those listed here.</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#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#EDATALINK">EDATALINK</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EEXIST">EEXIST</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#EFILECVT">EFILECVT</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">
<p>For example, may be returned if
the directories preceding the object to be renamed in the <em>old</em> path
name are part of <em>new</em>, or if either name refers to dot or dot-dot.</p>
</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#EISDIR">EISDIR</a>]</em></td>
<td align="left" valign="top">
<p><em>new</em> is a directory, but <em>old</em> is not a
directory.</p>
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EJRNDAMAGE">EJRNDAMAGE</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EJRNENTTOOLONG">EJRNENTTOOLONG</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EJRNINACTIVE">EJRNINACTIVE</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EJRNRCVSPC">EJRNRCVSPC</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#ENEWJRN">ENEWJRN</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#ENEWJRNRCV">ENEWJRNRCV</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#ENOTEMPTY">ENOTEMPTY</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;
</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#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#EMLINK">EMLINK</a>]</em></td>
<td align="left" valign="top">
<p><em>old</em> is a directory and the link count of the parent directory of
<em>new</em> would exceed LINK_MAX.</p>
</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#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#EUNKNOWN">EUNKNOWN</a>]</em></td>
<td align="left" valign="top">
&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top">
<em>[<a href="unix14.htm#EXDEV">EXDEV</a>]</em></td>
<td align="left" valign="top">
<p><em>old</em> and <em>new</em> identify files or directories in different
file systems. Links between different file systems are not allowed.</p>
</td>
</tr>
</table>
<p>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#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>
<br>
<h3>Error Messages</h3>
<p>The following messages may be sent from this function:</p>
<table width="100%" cellpadding="5">
<tr>
<th align="left" valign="top">Message ID</th>
<th align="left" valign="top">Error Message Text</th>
</tr>
<tr>
<td width="15%" valign="top">CPE3418 E</td>
<td width="85%" valign="top">Possible APAR condition or hardware failure.</td>
</tr>
<tr>
<td valign="top">CPFA0D4 E</td>
<td valign="top">File system error occurred. Error number &amp;1.</td>
</tr>
<tr>
<td valign="top">CPF3CF2 E</td>
<td valign="top">Error(s) occurred during running of &amp;1 API.</td>
</tr>
<tr>
<td valign="top">CPF9872 E</td>
<td 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="HDRrnmunUS">Usage Notes</a></h3>
<ol type="1">
<li>This function will fail with error code [ENOTSAFE] when all the following
conditions are true:
<ul>
<li>Where multiple threads exist in the job.<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>About the Rename Functions
<p>The integrated file system provides two functions that rename a file or
directory. Both rename the <em>old</em> path name to a <em>new</em> path name.
The difference is determined by what happens when <em>new</em> already
exists:</p>
<ul>
<li>If <em>new</em> already exists when using <strong>
Qp0lRenameUnlink()</strong>, the existing path name is unlinked (removed)
before <em>old</em> is renamed to <em>new</em>.<br>
</li>
<li>If <em>new</em> already exists when using <strong>
Qp0lRenameKeep()</strong>, the rename fails with the [EEXIST] error.</li>
</ul>
<p>These functions are defined in the <strong>&lt;Qp0lstdi.h&gt;</strong>
header file. When <strong>&lt;Qp0lstdi.h&gt;</strong> is included, the <strong>
rename()</strong> function is defined to be either <strong>
Qp0lRenameUnlink()</strong> or <strong>Qp0lRenameKeep()</strong>, depending on
the definitions of the _POSIX_SOURCE and _POSIX1_SOURCE macros:</p>
<ul>
<li>When _POSIX_SOURCE or _POSIX1_SOURCE is defined, <strong>rename()</strong>
is defined to be <strong>Qp0lRenameUnlink()</strong>. Either <strong>
rename()</strong> or <strong>Qp0lRenameUnlink()</strong> can be used to rename
a file or directory with the semantics of <strong>
Qp0lRenameUnlink()</strong>.<br>
</li>
<li>When _POSIX_SOURCE and _POSIX1_SOURCE are <strong>not</strong> defined,
<strong>rename()</strong> is defined to be <strong>Qp0lRenameKeep()</strong>.
Either <strong>rename()</strong> or <strong>Qp0lRenameKeep()</strong> can be
used to rename a file or directory with the semantics of <strong>
Qp0lRenameKeep()</strong>.</li>
</ul>
<p>When the <strong>&lt;Qp0lstdi.h&gt;</strong> header file is <strong>
not</strong> included, <strong>rename()</strong> operates only on database
files in the QSYS.LIB and independent ASP QSYS.LIB file systems, as it did
before the introduction of the integrated file system.</p>
<br>
</li>
<li>QSYS.LIB and Independent ASP QSYS.LIB File System Differences
<ul>
<li>When a database member is being renamed, the part of the <em>new</em> path
name preceding the object must be the same as that of the <em>old</em> path
name. That is, the sequence of "directories" (library and file) preceding the
object in the <em>new</em> path name must be the same as the sequence of
directories preceding the object in the <em>old</em> path name. If <em>new</em>
already exists, [ENOTSUP] is returned.<br>
</li>
<li>The following object types cannot be renamed when there are secondary
threads active in the job: *CFGL, *CNNL, *CTLD, *DEVD, *LIND, *NWID. The
operation will fail with error code [ENOTSAFE].<br>
</li>
<li>When a library is being renamed, the part of the <em>new</em> path name
preceding the object must be the same as that of the <em>old</em> path name.
That is, the sequence of "directories" (/QSYS.LIB or /asp_name/QSYS.LIB, where
asp_name is the independent Auxiliary Storage Pool name) preceding the object
in the <em>new</em> path name must be the same as the sequence of directories
preceding the object in the <em>old</em> path name.</li>
</ul>
<br>
</li>
<li>QDLS File System Differences
<p>When a folder is being renamed, the part of the <em>new</em> path name
preceding the object must be the same as that of the <em>old</em> path name.
That is, a folder must remain in the same parent folder.</p>
<p>If the object identified by the <em>new</em> path name exists, QDLS returns
the [EEXIST] error.</p>
<br>
</li>
<li>QOPT File System Differences
<p>You can rename only a volume or a file, not a directory.</p>
<p>If the object identified by the new path name exists, QOPT returns the
[EEXIST] error.</p>
<br>
</li>
<li>QFileSvr.400 File System Differences
<p>You cannot rename the first-level directory. For example, you cannot rename
<samp>Dir1</samp> in the path name <samp>/QFileSvr.400/Dir1/Dir2/Object</samp>.
The first-level directory identifies the target system in a communications
connection.</p>
<br>
</li>
<li>QNetWare File System Differences
<p>The new and old files or directories must exist on the same NetWare server.
This function cannot be used to move data from one server to another.</p>
<br>
</li>
<li>QNTC File System Differences
<p>The <em>new</em> and the <em>old</em> files or directories must exist on the
same Windows NT server. This function cannot be used to move data from one
server to another.</p>
</li>
<li>"Root" (/) and User-defined File System Differences
<p>If the file being renamed is in the "root" (/) file system or in a monocase
user-defined file system, and the file system has the *TYPE2 directory format,
and both <em>old</em> and <em>new</em> refer to the same link, but their case
is different (eg. /ABC and /Abc), Qp0lRenameUnlink() changes the link name to
the <em>new</em> name.</p>
</li>
<li>The file cannot be renamed if the file is a DataLink column
in an SQL table and a row in that SQL table references this file.
</li>
</ol>
<br>
<h3>Related Information</h3>
<ul>
<li>The &lt;<strong>stdio.h</strong>&gt; file (see <a href="unix13.htm">Header
Files for UNIX-Type Functions</a>)<br>
</li>
<li>The &lt;<strong>Qp0lstdi.h</strong>&gt; file (see <a href="unix13.htm">
Header Files for UNIX-Type Functions</a>)<br>
</li>
<li><a href="pathconf.htm">pathconf()</a>--Get Configurable Path Name
Variables<br>
</li>
<li><a href="renamefs.htm">rename()</a>--Rename File or Directory<br>
</li>
<li><a href="renamekp.htm">Qp0lRenameKeep()</a>--Rename File or Directory, Keep
"new" If It Exists<br>
</li>
<li><a href="renameunu.htm">QlgRenameUnlink()</a>--Rename File or Directory,
Unlink "new" If It Exists (using NLS-enabled path name)</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>When you pass two file names to this example, it will try to change the file
name from the first name to the second using <strong>
Qp0lRenameUnlink()</strong>.</p>
<pre>
#include &lt;Qp0lstdi.h&gt;
int main(int argc, char ** argv ) {
if ( argc != 3 )
printf( "Usage: %s old_fn new_fn\n", argv[0] );
else if ( Qp0lRenameUnlink( argv[1], argv[2] ) != 0
perror ( "Could not rename file" );
}
</pre>
<br>
<hr>
API introduced: V3R1
<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>