<html lang="en">
<head>
<title>rename - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="List-of-Supported-Calls.html#List-of-Supported-Calls" title="List of Supported Calls">
<link rel="prev" href="lseek.html#lseek" title="lseek">
<link rel="next" href="unlink.html#unlink" title="unlink">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.

(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual.  Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="rename"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="unlink.html#unlink">unlink</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="lseek.html#lseek">lseek</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="List-of-Supported-Calls.html#List-of-Supported-Calls">List of Supported Calls</a>
<hr>
</div>

<h5 class="unnumberedsubsubsec">rename</h5>

<p><a name="index-rename_002c-file_002di_002fo-system-call-2509"></a>
     <dl>
<dt>Synopsis:<dd>
     <pre class="smallexample">          int rename(const char *oldpath, const char *newpath);
</pre>
     <br><dt>Request:<dd>&lsquo;<samp><span class="samp">Frename,</span><var>oldpathptr</var><span class="samp">/</span><var>len</var><span class="samp">,</span><var>newpathptr</var><span class="samp">/</span><var>len</var></samp>&rsquo;

     <br><dt>Return value:<dd>On success, zero is returned.  On error, -1 is returned.

     <br><dt>Errors:<dd>
          <dl>
<dt><code>EISDIR</code><dd><var>newpath</var> is an existing directory, but <var>oldpath</var> is not a
directory.

          <br><dt><code>EEXIST</code><dd><var>newpath</var> is a non-empty directory.

          <br><dt><code>EBUSY</code><dd><var>oldpath</var> or <var>newpath</var> is a directory that is in use by some
process.

          <br><dt><code>EINVAL</code><dd>An attempt was made to make a directory a subdirectory
of itself.

          <br><dt><code>ENOTDIR</code><dd>A  component used as a directory in <var>oldpath</var> or new
path is not a directory.  Or <var>oldpath</var> is a directory
and <var>newpath</var> exists but is not a directory.

          <br><dt><code>EFAULT</code><dd><var>oldpathptr</var> or <var>newpathptr</var> are invalid pointer values.

          <br><dt><code>EACCES</code><dd>No access to the file or the path of the file.

          <br><dt><code>ENAMETOOLONG</code><dd>
<var>oldpath</var> or <var>newpath</var> was too long.

          <br><dt><code>ENOENT</code><dd>A directory component in <var>oldpath</var> or <var>newpath</var> does not exist.

          <br><dt><code>EROFS</code><dd>The file is on a read-only filesystem.

          <br><dt><code>ENOSPC</code><dd>The device containing the file has no room for the new
directory entry.

          <br><dt><code>EINTR</code><dd>The call was interrupted by the user. 
</dl>

   </dl>

   </body></html>

