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

1022 lines
26 KiB
HTML
Raw Normal View History

2024-04-02 14:02:31 +00:00
<!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>mkdir()--Make Directory</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. -->
<!-- Change History: -->
<!-- YYMMDD USERID Change description -->
<!-- Unix2 SCRIPT J converted by B2H R4.1 (346) (CMS) by V2KEA304 -->
<!-- at RCHVMW2 on 17 Feb 1999 at 11:05:09 -->
<!-- 010314 JTROUS Change due to S_ISGID change, V5R2, DCR 98686 -->
<!-- 010320 JTROUS Include Journal ERRNOs, should have in V5R1 -->
<!-- 011022 JTROUS Changes from API Review 1, V5R2 -->
<!-- 020416 JTROUS Changes for scan processing, V5R3, DCR 98680 -->
<!-- 020618 EMIG: updated for NFS threadsafety, V5R3 -->
<!-- 0206?? JET This file has undergone html cleanup June -->
<!-- 020719 MFENLON: updated for QFileSvr.400 threadsafety, V5R3 -->
<!-- 020829 RTHEIS : S_ISVTX mode bit, V5R3 -->
<!-- 050311 JTROUS : add info on CRTOBJAUD default, V5R4, fix errnos-->
<!-- End Header Records ============================================ -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<!-- Java sync-link -->
<script language="Javascript" src="../rzahg/synch.js" type="text/javascript">
</script>
<a name="Top_Of_Page"></a>
<h2>mkdir()--Make Directory</h2>
<div class="box" style="width: 70%;">
<br>
&nbsp;&nbsp;Syntax<br>
<pre>
#include &lt;sys/stat.h&gt;
int mkdir(const char <em>*path</em>, mode_t <em>mode</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="#USAGE_NOTES">Usage Notes</a>.<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The <strong>mkdir()</strong> function creates a new, empty directory whose
name is defined by <em>path</em>. The file permission bits in <em>mode</em> are
modified by the file creation mask of the job and then used to set the file
permission bits of the directory being created.</p>
<p>For more information on the permission bits in <em>mode</em> see <a href=
"chmod.htm">chmod()--Change File Authorizations</a>. For more information on
the file creation mask, see <a href="umask.htm">umask()--Set Authorization Mask
for Job</a>.</p>
<p>The owner ID of the new directory is set to the effective user ID (uid) of
the job. If the directory is being created in the "root" (/), QOpenSys, and
user-defined file systems, the following applies. If the S_ISGID bit of the
parent directory is off, the group ID (GID) is set to the effective GID of the
thread creating the directory. If the S_ISGID bit of the parent directory is
on, the group ID (GID) of the new directory is set to the GID of the parent
directory. For all other file systems, the group ID (GID) of the new directory
is set to the GID of the parent directory.</p>
<p><strong>mkdir()</strong> sets the access, change, modification, and creation
times for the new directory. It also sets the change and modification times for
the directory that contains the new directory (parent directory).</p>
<p>The link count of the parent directory link count is increased by one. The
link count of the new directory is set to 2. The new directory also contains an
entry for "dot" (.) and "dot-dot" (..).</p>
<p>If <em>path</em> names a symbolic link, the symbolic link is not followed,
and <strong>mkdir()</strong> fails with the [EEXIST] error.</p>
<p>If bits in <em>mode</em> other than the file permission bits are set,
<strong>mkdir()</strong> fails with the [EINVAL] error.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong><em>path</em></strong></dt>
<dd>(Input) A pointer to the null-terminated path name of the directory to be
created.
<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>The name of the new directory is assumed to be represented in the language
and country or region currently in effect for the process.</p>
<p>See <a href="mkdiru.htm">QlgMkdir()--Make Directory</a> for a description
and an example of supplying the <em>path</em> in any CCSID.</p>
<br>
</dd>
<dt><strong><em>mode</em></strong></dt>
<dd>(Input) Permission bits for the new directory. The
S_ISVTX
bit may also be specified when creating the directory.
<p>See <a href="chmod.htm">chmod()--Change File Authorizations</a> for details
on the values that can be specified for <em>mode</em>.</p>
</dd>
</dl>
<br>
<h3>Authorities</h3>
<p><strong>Note:</strong> Adopted authority is not used.</p>
<p><strong><a name="TBLAMKDIR">Authorization Required for mkdir() (excluding
QSYS.LIB, Independent ASP QSYS.LIB, and QDLS)</a></strong></p>
<table border>
<tr>
<th align="left" valign="bottom">Object Referred to</th>
<th align="center" valign="bottom">Authority Required</th>
<th align="left" valign="bottom">errno</th>
</tr>
<tr>
<td align="left" valign="top" width="75%">Each directory in the path name
preceding the directory to be created.</td>
<td align="center" valign="top" width="15%">*X</td>
<td align="left" valign="top" width="10%">EACCES</td>
</tr>
<tr>
<td align="left" valign="top">Parent directory of directory to be created</td>
<td align="center" valign="top">*WX</td>
<td align="left" valign="top">EACCES</td>
</tr>
</table>
<p><strong><a name="TBLAMKDIR2">Authorization Required for mkdir() in the
QSYS.LIB and independent ASP QSYS.LIB File Systems</a></strong></p>
<table border>
<tr>
<th align="left" valign="bottom">Object Referred to</th>
<th align="center" valign="bottom">Authority Required</th>
<th align="left" valign="bottom">errno</th>
</tr>
<tr>
<td align="left" valign="top" width="75%">Each directory in the path name
preceding the directory to be created.</td>
<td align="center" valign="top" width="15%">*X</td>
<td align="left" valign="top" width="10%">EACCES</td>
</tr>
<tr>
<td align="left" valign="top">Parent directory of directory to be created (when
the directory being created is a database file)</td>
<td align="center" valign="top">*X and *ADD</td>
<td align="left" valign="top">EACCES</td>
</tr>
</table>
<br>
<p><strong><a name="TBLAMKDIR3">Authorization Required for mkdir() in the QDLS
File System</a></strong></p>
<table border>
<tr>
<th align="left" valign="bottom">Object Referred to</th>
<th align="center" valign="bottom">Authority Required</th>
<th align="left" valign="bottom">errno</th>
</tr>
<tr>
<td align="left" valign="top" width="75%">Each directory in the path name
preceding the directory to be created.</td>
<td align="center" valign="top" width="15%">*X</td>
<td align="left" valign="top" width="10%">EACCES</td>
</tr>
<tr>
<td align="left" valign="top">Parent directory of directory to be created</td>
<td align="center" valign="top">*CHANGE</td>
<td align="left" valign="top">EACCES</td>
</tr>
</table>
<br>
<h3>Return Value</h3>
<dl compact>
<dt><em>0</em></dt>
<dd><strong>mkdir()</strong> was successful. The directory was created.</dd>
<dt><em>-1</em></dt>
<dd><strong>mkdir()</strong> was not successful. The directory was not created.
The <em>errno</em> global variable is set to indicate the error.</dd>
</dl>
<br>
<h3>Error Conditions</h3>
<p>If <strong>mkdir()</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#EEXIST">EEXIST</a>]</em></td>
<td align="left" valign="top">
<p>The named file, directory, or path already exists. Or, the last component of
<em>path</em> is a symbolic link.</p>
</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">
&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#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#EMLINK">EMLINK</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#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#ENOSYS">ENOSYS</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#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>
</table>
<p>If interaction with a file server is required to access the object, <em>
errno</em> could 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>
<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>
<h3><a name="usage_notes">Usage Notes</a></h3>
<ol type="1">
<li>This function will fail with error code [ENOTSAFE] when all the following
conditions are true:<br>
<br>
<ul>
<li>There are secondary threads active 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:<br>
<br>
<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 user who creates the directory becomes its owner.</p>
<p>The S_ISGID bit of the directory affects what the group ID (GID) is for
objects that are created in the directory. If the S_ISGID bit of the parent
directory is off, the group ID (GID) is set to the effective GID of the thread
creating the object. If the S_ISGID bit of the parent directory is on, the
group ID (GID) is copied from the parent directory in which the new directory
is being created.</p>
<p>The owner, primary group, and public object authorities (*OBJEXIST, *OBJMGT,
*OBJALTER, and *OBJREF) are copied from the parent directory's owner, primary
group, and public object authorities. This occurs even when the new directory
has a different owner than the parent directory. The owner, primary group, and
public data authorities (*R, *W, and *X) are derived from the permissions
specified in the mode (except for those permissions that are also set in the
file mode creation mask). The new directory does not have any private
authorities or authorization list. It only has authorities for the owner,
primary group, and public.</p>
<p>The create object scanning
attribute value for this directory is copied from the create object scanning
attribute value of the parent directory. For more information on this
attribute, see <a href="qsetattr.htm">Qp0lSetAttr()</a>--Set Attributes. </p>
<p><img src="delta.gif" alt="Start of change">
The create object auditing
attribute value for this directory will be set to *SYSVAL.
For more information on this attribute,
see <a href="qsetattr.htm">Qp0lSetAttr()</a>--Set Attributes.
<img src="deltaend.gif" alt="End of change"></p>
<br>
</li>
<li>QSYS.LIB and Independent ASP QSYS.LIB File System Differences
<p>The user who creates the directory becomes its owner. The group ID is copied
from the primary user ID, if one exists.</p>
<p>The owner is given *ALL object authority to the new directory. The group
object authorities are copied from the user profile of the owner. The public
receives no object authority to the directory.</p>
<p>The primary group authorities specified in <em>mode</em> are not saved if no
primary group exists.</p>
<p>The change and modification times for the directory that contains the new
directory are only set when the new directory is a database file.</p>
<p><img src="delta.gif" alt="Start of change">
The create object auditing
attribute value for this directory will be set to *SYSVAL.
For more information on this attribute,
see <a href="qsetattr.htm">Qp0lSetAttr()</a>--Set Attributes.
<img src="deltaend.gif" alt="End of change"></p>
<br>
</li>
<li>QDLS File System Differences
<p>The user who creates the directory becomes its owner. The group ID is copied
from the parent folder in which the new directory is being created.</p>
<p>The object authority of the owner is set to *OBJMGT + *OBJEXIST + *OBJALTER
+ *OBJREF.</p>
<p>The primary group and public object authority and all other authorities are
copied from the parent folder.</p>
<p>The owner, primary group, and public data authority (including *OBJOPR) are
derived from the permissions specified in <em>mode</em> (except those
permissions that are also set in the file mode creation mask).</p>
<p>The primary group authorities specified in <em>mode</em> are not saved if no
primary group exists.</p>
<br>
</li>
<li>QOPT File System Differences
<p>When the volume on which the directory is being created is formatted in
Universal Disk Format (UDF):<br>
<br>
</p>
<ul>
<li>The authorization that is checked for the object and preceding directories
in the path name follows the rules described in <a href="#TBLAMKDIR">
Authorization Required for mkdir()</a>.</li>
<li>The volume authorization list is checked for *CHANGE authority.</li>
<li>The user who creates the file becomes its owner.</li>
<li>The group ID is copied from the parent directory in which the file is
created.</li>
<li>The owner, primary group, and public data authorities (*R, *W, and *X) are
derived from the permissions specified in the mode.</li>
<li>The same uppercase and lowercase forms in which the names are entered are
preserved. No distinction is made between uppercase and lowercase when
searching for names.</li>
</ul>
<p>When the volume on which the directory is being created is not formatted in
Universal Disk Format (UDF):</p>
<ul>
<li>No authorization is checked on the object or preceding directories in the
path name.</li>
<li>The volume authorization list is checked for *CHANGE authority.</li>
<li>QDFTOWN becomes the owner of the directory.</li>
<li>No group ID is assigned to the directory.</li>
<li>The permissions specified in the mode are ignored. The owner, primary
group, and public data authorities are set to RWX.</li>
<li>For newly created directories, names are created in uppercase. No
distinction is made between uppercase and lowercase when searching for
names.</li>
</ul>
<p>A directory cannot be created as a direct child of /QOPT.</p>
<p>The change and modification times of the parent directory are not
updated.</p>
<br>
</li>
<li>Network File System Differences
<p>Local access to remote directories through the Network File System may
produce unexpected results due to conditions at the server. The creation of a
directory may fail if permissions and other attributes that are stored locally
by the Network File System are more restrictive than those at the server. A
later attempt to create a file can succeed when the locally stored data has
been refreshed. (Several options on the Add Mounted File System (ADDMFS)
command determine the time between refresh operations of local data.) The
creation can also succeed after the file system has been remounted.</p>
<p>If you try to re-create a directory that was recently deleted, the request
may fail because data that was stored locally by the Network File System still
has a record of the directory's existence. The creation succeeds when the
locally stored data has been updated.</p>
<br>
</li>
<li>QNetWare File System Differences
<p>The QNetWare file system does not fully support mode bits. See <a href=
"../rzaef/rzaefoverview.htm">NetWare on iSeries</a> for more information.</p>
<br>
</li>
<li>QNTC File System Differences
<p>Directory authorities are inherited from the access control list (if any
exists) of the parent directory. The mode bits are ignored.</p>
<p>In addition to the normal <strong>mkdir()</strong> function, in the QNTC
file system, <strong>mkdir()</strong> can be used to add a server directory
under the /QNTC directory level. Directories for all functional Windows NT
servers in the local subnet are automatically created. However, Windows NT
servers outside the local subnet must be added by using <strong>
mkdir()</strong> or the MKDIR command. For example:</p>
<pre>
char new_dir[]="/QNTC/NTSRV1";
mkdir(new_dir,NULL)
</pre>
<p>would add the NTSRV1 server into the QNTC directory structure for future
access of files and directories on that server.</p>
<p>It is also possible to add the server by using the TCP/IP address. For
example:</p>
<pre>
char new_dir[]="/QNTC/9.130.67.24";
mkdir(new_dir,NULL)
</pre>
<p>The directories added using <strong>mkdir()</strong> in the QNTC
file system will not persist across
IPLs. Thus, <strong>mkdir()</strong> or the Make Directory (MKDIR) command must
be reissued after every system IPL.</p>
</li>
</ol>
<br>
<h3>Related Information</h3>
<ul>
<li>The &lt;<strong>sys/stat.h</strong>&gt; file (see <a href="unix13.htm">
Header Files for UNIX-Type Functions</a>)<br>
</li>
<li><a href="chmod.htm">chmod()</a>--Change File Authorizations<br>
</li>
<li><a href="mkdiru.htm">QlgMkdir()</a>--Make Directory<br>
</li>
<li><a href="stat.htm">stat()</a>--Get File Information<br>
</li>
<li><a href="umask.htm">umask()</a>--Set Authorization Mask for Job<br>
</li>
<li><a href="pathconf.htm">pathconf()</a>--Get Configurable Path Name
Variables</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>The following example creates a new directory:</p>
<pre>
#include &lt;sys/stat.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
main() {
char new_dir[]="new_dir";
if (mkdir(new_dir, S_IRWXU|S_IRGRP|S_IXGRP) != 0)
perror("mkdir() error");
else if (chdir(new_dir) != 0)
perror("first chdir() error");
else if (chdir("..") != 0)
perror("second chdir() error");
else if (rmdir(new_dir) != 0)
perror("rmdir() error");
else
puts("success!");
}
</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>