blob: 8dabf67625809810e756d646522186798e70f0d9 [file] [log] [blame]
<html lang="en">
<head>
<title>Reading Attributes - 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="Attribute-Meanings.html#Attribute-Meanings" title="Attribute Meanings">
<link rel="next" href="Testing-File-Type.html#Testing-File-Type" title="Testing File Type">
<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="Reading-Attributes"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Testing-File-Type.html#Testing-File-Type">Testing File Type</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Attribute-Meanings.html#Attribute-Meanings">Attribute Meanings</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="File-Attributes.html#File-Attributes">File Attributes</a>
<hr>
</div>
<h4 class="subsection">14.9.2 Reading the Attributes of a File</h4>
<p>To examine the attributes of files, use the functions <code>stat</code>,
<code>fstat</code> and <code>lstat</code>. They return the attribute information in
a <code>struct stat</code> object. All three functions are declared in the
header file <samp><span class="file">sys/stat.h</span></samp>.
<!-- sys/stat.h -->
<!-- POSIX.1 -->
<div class="defun">
&mdash; Function: int <b>stat</b> (<var>const char *filename, struct stat *buf</var>)<var><a name="index-stat-1505"></a></var><br>
<blockquote><p>The <code>stat</code> function returns information about the attributes of the
file named by <var>filename</var><!-- /@w --> in the structure pointed to by <var>buf</var>.
<p>If <var>filename</var> is the name of a symbolic link, the attributes you get
describe the file that the link points to. If the link points to a
nonexistent file name, then <code>stat</code> fails reporting a nonexistent
file.
<p>The return value is <code>0</code> if the operation is successful, or
<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>ENOENT</code><dd>The file named by <var>filename</var> doesn't exist.
</dl>
<p>When the sources are compiled with <code>_FILE_OFFSET_BITS == 64</code> this
function is in fact <code>stat64</code> since the LFS interface transparently
replaces the normal implementation.
</p></blockquote></div>
<!-- sys/stat.h -->
<!-- Unix98 -->
<div class="defun">
&mdash; Function: int <b>stat64</b> (<var>const char *filename, struct stat64 *buf</var>)<var><a name="index-stat64-1506"></a></var><br>
<blockquote><p>This function is similar to <code>stat</code> but it is also able to work on
files larger then 2^31 bytes on 32-bit systems. To be able to do
this the result is stored in a variable of type <code>struct stat64</code> to
which <var>buf</var> must point.
<p>When the sources are compiled with <code>_FILE_OFFSET_BITS == 64</code> this
function is available under the name <code>stat</code> and so transparently
replaces the interface for small files on 32-bit machines.
</p></blockquote></div>
<!-- sys/stat.h -->
<!-- POSIX.1 -->
<div class="defun">
&mdash; Function: int <b>fstat</b> (<var>int filedes, struct stat *buf</var>)<var><a name="index-fstat-1507"></a></var><br>
<blockquote><p>The <code>fstat</code> function is like <code>stat</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>.
<p>Like <code>stat</code>, <code>fstat</code> returns <code>0</code> on success and <code>-1</code>
on failure. The following <code>errno</code> error conditions are defined for
<code>fstat</code>:
<dl>
<dt><code>EBADF</code><dd>The <var>filedes</var> argument is not a valid file descriptor.
</dl>
<p>When the sources are compiled with <code>_FILE_OFFSET_BITS == 64</code> this
function is in fact <code>fstat64</code> since the LFS interface transparently
replaces the normal implementation.
</p></blockquote></div>
<!-- sys/stat.h -->
<!-- Unix98 -->
<div class="defun">
&mdash; Function: int <b>fstat64</b> (<var>int filedes, struct stat64 *buf</var>)<var><a name="index-fstat64-1508"></a></var><br>
<blockquote><p>This function is similar to <code>fstat</code> but is able to work on large
files on 32-bit platforms. For large files the file descriptor
<var>filedes</var> should be obtained by <code>open64</code> or <code>creat64</code>.
The <var>buf</var> pointer points to a variable of type <code>struct stat64</code>
which is able to represent the larger values.
<p>When the sources are compiled with <code>_FILE_OFFSET_BITS == 64</code> this
function is available under the name <code>fstat</code> and so transparently
replaces the interface for small files on 32-bit machines.
</p></blockquote></div>
<!-- sys/stat.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: int <b>lstat</b> (<var>const char *filename, struct stat *buf</var>)<var><a name="index-lstat-1509"></a></var><br>
<blockquote><p>The <code>lstat</code> function is like <code>stat</code>, except that it does not
follow symbolic links. If <var>filename</var> is the name of a symbolic
link, <code>lstat</code> returns information about the link itself; otherwise
<code>lstat</code> works like <code>stat</code>. See <a href="Symbolic-Links.html#Symbolic-Links">Symbolic Links</a>.
<p>When the sources are compiled with <code>_FILE_OFFSET_BITS == 64</code> this
function is in fact <code>lstat64</code> since the LFS interface transparently
replaces the normal implementation.
</p></blockquote></div>
<!-- sys/stat.h -->
<!-- Unix98 -->
<div class="defun">
&mdash; Function: int <b>lstat64</b> (<var>const char *filename, struct stat64 *buf</var>)<var><a name="index-lstat64-1510"></a></var><br>
<blockquote><p>This function is similar to <code>lstat</code> but it is also able to work on
files larger then 2^31 bytes on 32-bit systems. To be able to do
this the result is stored in a variable of type <code>struct stat64</code> to
which <var>buf</var> must point.
<p>When the sources are compiled with <code>_FILE_OFFSET_BITS == 64</code> this
function is available under the name <code>lstat</code> and so transparently
replaces the interface for small files on 32-bit machines.
</p></blockquote></div>
</body></html>