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

300 lines
8.4 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>putenv()--Change or Add Environment Variable</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 -->
<!-- Direct1 SCRIPT J converted by B2H R4.1 (346) (CMS) by V2KEA304 -->
<!-- at RCHVMW2 on 17 Feb 1999 at 11:05:09 -->
<!-- This file has undergone html cleanup on 04/29/02 by JET -->
<!-- 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>putenv()--Change or Add Environment Variable</h2>
<div class="box" style="width: 60%;">
<br>
&nbsp;&nbsp;Syntax
<pre>
#include &lt;stdlib.h&gt;
int putenv(const char <em>*string</em>);;
</pre>
&nbsp;&nbsp;Service Program Name: QP0ZCPA<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: Yes. See Usage Notes for more information.<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The <strong>putenv()</strong> function sets the value of a job-level
environment variable by changing an existing variable or creating a new one.
The <em>string</em> parameter points to a string of the form <samp>
name=value</samp>, where <samp>name</samp> is the environment variable and
<samp>value</samp> is the new value for it.</p>
<p>The <samp>name</samp> cannot contain a blank. For example,</p>
<pre>
PATH NAME=/my_lib/joe_user
</pre>
<p>is not valid because of the blank between <samp>PATH</samp> and <samp>
NAME</samp>. The name can contain an equal (=) symbol, but the system
interprets all characters following the first equal symbol as being the value
of the environment variable. For example,</p>
<pre>
PATH=NAME=/my_lib/joe_user
</pre>
<p>will result in a value of 'NAME=/my_lib/joe_user' for the variable PATH.</p>
<br>
<!-- Please NOTE: DO NOT DELETE THIS SECTION if this API has no authorities and locks. -->
<!-- Instead, use the commented out coding below to indicate NONE. -->
<h3>Authorities and Locks</h3>
<!-- Use this if there are no authorities and locks. -->
<p>None.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong><em>string</em></strong></dt>
<dd>(Input) A pointer to the <samp>name=value</samp> string.</dd>
</dl>
<br>
<h3>Return Value</h3>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top"><strong>putenv()</strong> was successful.</td>
</tr>
<tr>
<td align="left" valign="top"><em>-1</em></td>
<td align="left" valign="top"><strong>putenv()</strong> was not successful. The
<em>errno</em> variable is set to indicate the error.</td>
</tr>
</table>
<br>
<br>
<h3>Error Conditions</h3>
<p>If <strong>putenv()</strong> is not successful, <em>errno</em> indicates one
of the following errors.</p>
<dl compact>
<dt><em>[EDAMAGE]</em></dt>
<dd>
<p>A damaged object was encountered.</p>
<p>A referenced object is damaged. The object cannot be used.</p>
</dd>
<dt><em>[EFAULT]</em></dt>
<dd>
<p>The address used for an argument is not correct. In attempting to use an
argument in a call, the system detected an address that is not valid.</p>
<p>While attempting to access a parameter passed to this function, the system
detected an address that is not valid.</p>
</dd>
<dt><em>[EINVAL]</em></dt>
<dd>
<p>The value specified for the argument is not correct. A function was passed
incorrect argument values, or an operation was attempted on an object and the
operation specified is not supported for that type of object.</p>
<p>An argument value is not valid, out of range, or NULL. For example, the
string may not be in the correct format.</p>
</dd>
<dt><em>[ENOMEM]</em></dt>
<dd>
<p>Storage allocation request failed.</p>
<p>A function needed to allocate storage, but no storage is available.</p>
<p>There is not enough memory to perform the requested function. (There is a
limit of 4095 environment variables per job.)</p>
</dd>
<dt><em>[EUNKNOWN]</em></dt>
<dd>
<p>Unknown system state.</p>
<p>The operation failed because of an unknown system state. See any messages in
the job log and correct any errors that are indicated, then retry the
operation.</p>
</dd>
</dl>
<br>
<h3>Usage Notes</h3>
<ol>
<li>Although <strong>putenv()</strong> is threadsafe, if a thread calls an
environment variable function while another thread is accessing an environment
variable from the environ array the thread may see undefined results. The
environ array can be accessed directly or by using a pointer returned from the
<strong>getenv()</strong> or <strong>Qp0zGetEnv()</strong> functions. The
environment contents are only protected during calls to the environment
variable functions.<br>
</li>
<li>All environment variables are stored with an associated CCSID (coded
character set identifier). Because <strong>putenv()</strong> does not specify a
CCSID, the default CCSID for the job is used as the CCSID associated with
strings that are stored using <strong>putenv()</strong>.<br>
</li>
<li>No translation is done based on the CCSID. The CCSID is just stored and
retrieved as an integer value associated with each environment variable.</li>
</ol>
<br>
<h3>Related Information</h3>
<ul>
<li><a href="evgetenv.htm">getenv()</a>--Get Value of Environment Variable</li>
<li><a href="evdltenv.htm">Qp0zDltEnv()</a>--Delete an Environment
Variable</li>
<li><a href="evdltsev.htm">Qp0zDltSysEnv()</a>--Delete a System-Level
Environment Variable</li>
<li><a href="evgetall.htm">Qp0zGetAllSysEnv()</a>--Get All System-Level
Environment Variables</li>
<li><a href="evgenvxt.htm">Qp0zGetEnv()</a>--Get Value of Environment Variable
(Extended)</li>
<li><a href="evgetsev.htm">Qp0zGetSysEnv()</a>--Get Value of System-Level
Environment Variable</li>
<li><a href="evinenv.htm">Qp0zInitEnv()</a>--Initialize Environment for
Variables</li>
<li><a href="evpenvxt.htm">Qp0zPutEnv()</a>--Change or Add Environment Variable
(Extended)</li>
<li><a href="evputsev.htm">Qp0zPutSysEnv()</a>--Change or Add a System-Level
Environment</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 uses <strong>putenv()</strong> and <strong>
getenv()</strong>.</p>
<pre>
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;stdlib.h&gt;
int main(int argc, char **argv)
{
char *var1 = "PATH=/:/home/userid";
char *name1 = "PATH";
char *val1 = NULL;
int rc;
rc = putenv(var1);
if (rc &lt; 0) {
printf("Error inserting &lt;%s&gt; in environ, errno = %d\n",
var1, errno);
return 1;
}
printf("&lt;%s&gt; inserted in environ\n", var1);
val1 = getenv(name1);
if (val1 == NULL) {
printf("Error retrieving &lt;%s&gt; from environ, errno = %d\n",
name1, errno);
return 1;
}
printf("&lt;%s&gt; retrieved from environ, value is &lt;%s&gt;\n",
name1, val1);
return 0;
}
</pre>
<p><strong>Output:</strong></p>
<pre>
&lt;PATH=/:/home/userid&gt; inserted in environ
&lt;PATH&gt; retrieved from environ, value is &lt;/:/home/userid&gt;
</pre>
<p>For other examples, see the following:</p>
<ul>
<li><a href="../apiref/apiexusvar.htm">Using Environment Variables</a>.<br>
</li>
<li><a href="../apiref/apiexuspro.htm">Using the Spawn Process and Wait for Child
Process APIs</a>.<br>
</li>
<li><a href="spawnu.htm#spawnuexmp">Using the Spawn Process (using NLS-enabled
path name)</a></li>
</ul>
<br>
<hr>
API introduced: V3R6
<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>