blob: 63cb726edd9fd12e37526d9c569e93a94efd63c5 [file] [log] [blame]
<html lang="en">
<head>
<title>File Times - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="File-Attributes.html#File-Attributes" title="File Attributes">
<link rel="prev" href="Testing-File-Access.html#Testing-File-Access" title="Testing File Access">
<link rel="next" href="File-Size.html#File-Size" title="File Size">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.
This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 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 Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A
copy of the license is included in the section entitled "GNU Free
Documentation License".
(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual. Buying copies from the FSF
supports it 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="File-Times"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="File-Size.html#File-Size">File Size</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Testing-File-Access.html#Testing-File-Access">Testing File Access</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="File-Attributes.html#File-Attributes">File Attributes</a>
<hr>
</div>
<h4 class="subsection">14.9.9 File Times</h4>
<p><a name="index-file-access-time-1581"></a><a name="index-file-modification-time-1582"></a><a name="index-file-attribute-modification-time-1583"></a>Each file has three time stamps associated with it: its access time,
its modification time, and its attribute modification time. These
correspond to the <code>st_atime</code>, <code>st_mtime</code>, and <code>st_ctime</code>
members of the <code>stat</code> structure; see <a href="File-Attributes.html#File-Attributes">File Attributes</a>.
<p>All of these times are represented in calendar time format, as
<code>time_t</code> objects. This data type is defined in <samp><span class="file">time.h</span></samp>.
For more information about representation and manipulation of time
values, see <a href="Calendar-Time.html#Calendar-Time">Calendar Time</a>.
<a name="index-time_002eh-1584"></a>
Reading from a file updates its access time attribute, and writing
updates its modification time. When a file is created, all three
time stamps for that file are set to the current time. In addition, the
attribute change time and modification time fields of the directory that
contains the new entry are updated.
<p>Adding a new name for a file with the <code>link</code> function updates the
attribute change time field of the file being linked, and both the
attribute change time and modification time fields of the directory
containing the new name. These same fields are affected if a file name
is deleted with <code>unlink</code>, <code>remove</code> or <code>rmdir</code>. Renaming
a file with <code>rename</code> affects only the attribute change time and
modification time fields of the two parent directories involved, and not
the times for the file being renamed.
<p>Changing the attributes of a file (for example, with <code>chmod</code>)
updates its attribute change time field.
<p>You can also change some of the time stamps of a file explicitly using
the <code>utime</code> function&mdash;all except the attribute change time. You
need to include the header file <samp><span class="file">utime.h</span></samp> to use this facility.
<a name="index-utime_002eh-1585"></a>
<!-- time.h -->
<!-- POSIX.1 -->
<div class="defun">
&mdash; Data Type: <b>struct utimbuf</b><var><a name="index-struct-utimbuf-1586"></a></var><br>
<blockquote><p>The <code>utimbuf</code> structure is used with the <code>utime</code> function to
specify new access and modification times for a file. It contains the
following members:
<dl>
<dt><code>time_t actime</code><dd>This is the access time for the file.
<br><dt><code>time_t modtime</code><dd>This is the modification time for the file.
</dl>
</p></blockquote></div>
<!-- time.h -->
<!-- POSIX.1 -->
<div class="defun">
&mdash; Function: int <b>utime</b> (<var>const char *filename, const struct utimbuf *times</var>)<var><a name="index-utime-1587"></a></var><br>
<blockquote><p>This function is used to modify the file times associated with the file
named <var>filename</var>.
<p>If <var>times</var> is a null pointer, then the access and modification times
of the file are set to the current time. Otherwise, they are set to the
values from the <code>actime</code> and <code>modtime</code> members (respectively)
of the <code>utimbuf</code> structure pointed to by <var>times</var>.
<p>The attribute modification time for the file is set to the current time
in either case (since changing the time stamps is itself a modification
of the file attributes).
<p>The <code>utime</code> function returns <code>0</code> if successful and <code>-1</code>
on failure. In addition to the usual file name errors
(see <a href="File-Name-Errors.html#File-Name-Errors">File Name Errors</a>), the following <code>errno</code> error conditions
are defined for this function:
<dl>
<dt><code>EACCES</code><dd>There is a permission problem in the case where a null pointer was
passed as the <var>times</var> argument. In order to update the time stamp on
the file, you must either be the owner of the file, have write
permission for the file, or be a privileged user.
<br><dt><code>ENOENT</code><dd>The file doesn't exist.
<br><dt><code>EPERM</code><dd>If the <var>times</var> argument is not a null pointer, you must either be
the owner of the file or be a privileged user.
<br><dt><code>EROFS</code><dd>The file lives on a read-only file system.
</dl>
</p></blockquote></div>
<p>Each of the three time stamps has a corresponding microsecond part,
which extends its resolution. These fields are called
<code>st_atime_usec</code>, <code>st_mtime_usec</code>, and <code>st_ctime_usec</code>;
each has a value between 0 and 999,999, which indicates the time in
microseconds. They correspond to the <code>tv_usec</code> field of a
<code>timeval</code> structure; see <a href="High_002dResolution-Calendar.html#High_002dResolution-Calendar">High-Resolution Calendar</a>.
<p>The <code>utimes</code> function is like <code>utime</code>, but also lets you specify
the fractional part of the file times. The prototype for this function is
in the header file <samp><span class="file">sys/time.h</span></samp>.
<a name="index-sys_002ftime_002eh-1588"></a>
<!-- sys/time.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: int <b>utimes</b> (<var>const char *filename, struct timeval tvp</var><tt>[2]</tt>)<var><a name="index-utimes-1589"></a></var><br>
<blockquote><p>This function sets the file access and modification times of the file
<var>filename</var>. The new file access time is specified by
<var>tvp</var><code>[0]</code>, and the new modification time by
<var>tvp</var><code>[1]</code>. Similar to <code>utime</code>, if <var>tvp</var> is a null
pointer then the access and modification times of the file are set to
the current time. This function comes from BSD.
<p>The return values and error conditions are the same as for the <code>utime</code>
function.
</p></blockquote></div>
<!-- sys/time.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: int <b>lutimes</b> (<var>const char *filename, struct timeval tvp</var><tt>[2]</tt>)<var><a name="index-lutimes-1590"></a></var><br>
<blockquote><p>This function is like <code>utimes</code>, except that it does not follow
symbolic links. If <var>filename</var> is the name of a symbolic link,
<code>lutimes</code> sets the file access and modification times of the
symbolic link special file itself (as seen by <code>lstat</code>;
see <a href="Symbolic-Links.html#Symbolic-Links">Symbolic Links</a>) while <code>utimes</code> sets the file access and
modification times of the file the symbolic link refers to. This
function comes from FreeBSD, and is not available on all platforms (if
not available, it will fail with <code>ENOSYS</code>).
<p>The return values and error conditions are the same as for the <code>utime</code>
function.
</p></blockquote></div>
<!-- sys/time.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: int <b>futimes</b> (<var>int fd, struct timeval tvp</var><tt>[2]</tt>)<var><a name="index-futimes-1591"></a></var><br>
<blockquote><p>This function is like <code>utimes</code>, except that it takes an open file
descriptor as an argument instead of a file name. See <a href="Low_002dLevel-I_002fO.html#Low_002dLevel-I_002fO">Low-Level I/O</a>. This function comes from FreeBSD, and is not available on all
platforms (if not available, it will fail with <code>ENOSYS</code>).
<p>Like <code>utimes</code>, <code>futimes</code> returns <code>0</code> on success and <code>-1</code>
on failure. The following <code>errno</code> error conditions are defined for
<code>futimes</code>:
<dl>
<dt><code>EACCES</code><dd>There is a permission problem in the case where a null pointer was
passed as the <var>times</var> argument. In order to update the time stamp on
the file, you must either be the owner of the file, have write
permission for the file, or be a privileged user.
<br><dt><code>EBADF</code><dd>The <var>filedes</var> argument is not a valid file descriptor.
<br><dt><code>EPERM</code><dd>If the <var>times</var> argument is not a null pointer, you must either be
the owner of the file or be a privileged user.
<br><dt><code>EROFS</code><dd>The file lives on a read-only file system.
</dl>
</p></blockquote></div>
</body></html>