文件和目录:stat fstat lstat函数

文件和目录:stat fstat lstat函数

#include <sys/stat.h>
int stat( const char *restrict pathname, struct stat *restrict buf );
int fstat( int filedes, struct stat *buf );
int lstat( const char *restrict pathname, struct stat *restrict buf );文件
三个函数的返回值:若成功则返回0,若出错则返回-1

一旦给出pathname,stat函数就返回与此命名文件有关的信息结构。

fstat函数获取已在描述符filedes上打开的有关信息。

lstat函数类似于stat,但是当命名的文件是一个符号链接时,lstat返回该符号链接的有关信息,而不是由该符号链接引用文件的信息。

第二个参数buf是指针,它指向一个我们必须提供的结构。这些函数填写由buf指向的结构。该结构的实际定义可能随实现有所不同,但其基本形式是:

struct stat
{
    mode_t     st_mode;    /* file type & mode (permissions) */
    ino_t      st_ino;     /* i-node number (serial number) */
    dev_t      st_dev;     /* device number (file system) */
    dev_t      st_rdev;    /* device number for special files */
    nlink_t    st_nlink;   /* number of links */
    uid_t      st_uid;     /* user ID of owner */
    gid_t      st_gid;     /* group ID of owner */
    off_t      st_size;    /* size in bytes, for regular files */
    time_t     st_atime;   /* time of last access */
    time_t     st_mtime;   /* time of last modification */
    time_t     st_ctime;   /* time of last file status change */
    blksize_t  st_blksize; /* best I/O block size */
    blkcnt_t   st_blocks;  /* number of disk blocks allocated */
};

lstat参数打印文件类型实例:

#include "apue.h"
int main (int argc ,char *argv[])
{
int i;
struct stat buf;
char *ptr;
for(i=1;i<argc;i++)
{

printf("%s: ",argv[i]);
if (lstat(argv[i],&buf)<0)
{
err_ret("lstat error");
continue;

}
if (S_ISREG(buf.st_mode)) ptr="regular";
else if(S_ISDIR(buf.st_mode)) ptr="directory";
else if (S_ISCHR(buf.st_mode)) ptr="character special";
else if(S_ISBLK(buf.st_mode)) ptr="block special";
else if(S_ISFIFO(buf.st_mode)) ptr="fifo";
else if(S_ISLNK(buf.st_mode)) ptr="symbolic link";
else if(S_ISSOCK(buf.st_mode)) ptr="socket";
else ptr="** unknown mode **";
printf("%s\n ",ptr);
}
exit(0);
}

 运行结果
时间: 2024-11-25 12:45:34

文件和目录:stat fstat lstat函数的相关文章

C语言:stat,fstat和lstat函数

这三个函数的功能是一致的,都用于获取文件相关信息,但应用于不同的文件对象.对于函数中给出pathname参数,stat函数返回与此命名文件有关的信息结构,fstat函数获取已在描述符fields上打开文件的有关信息,lstat函数类似于stat但是当命名的文件是一个符号链接时,lstat返回该符号链接的有关信息,而不是由该符号链接引用文件的信息.第二个参数buf是指针,它指向一个用于保存文件描述信息的结构,由函数填写结构内容.该结构的实际定义可能随实现有所不同. 用法: #include int

APUE读书笔记: 文件和目录

stat, fstat, fstatat 和 lstat函数: stat函数返回与pathname命名文件相关的信息结构: fstat函数返回已在文件描述符fd打开文件的相关信息: lstat函数与stat函数类似,但当命名文件是一个符号链接时,返回该符号链接的相关信息: fstatat函数为相对于当前打开目录(有fd参数指向)的路径名返回文件统计信息. struct stat 的具体定义如下图: 文件类型: 文件类型包括:普通文件,目录文件,块特殊文件,字符特殊文件,FIFO,套接字和符号链接

UNIX 环境高级编程 文件和目录

函数stat , fstat , fstatat , lstat stat函数返回与此文件有关的信息结构. fstat函数使用已打开的文件描述符(而stat则使用文件名) fstatat函数 为一个相对于当前打开目录的路径名返回文件信息. lstat函数返回该符号链接的有关信息,而不是该符号链接引用的文件的信息. 使用stat最多的地方可能就是 ls -l 命令. st_mode  与 S_IFMT 进行 与 运算 在与 S_IFXXX常量相比较,来判断类型. 文件类型 1.普通文件: 无论是文

Unix高级环境编程学习笔记(二):文件和目录

1 stat,fstat,lstat函数 #include<sys/stat.h> int stat (const char* restrict pathname, struct stat *restrict buf); int fstat (int filedes, struct stat * buf); int lstat (const char* restrict pathname, struct stat *restrict buf); 成功返回0,失败返回-1 stat返回pathn

APUE(4)---文件和目录 (3)

十三.函数rename和renameat #include <stdio.h> int rename(const char *oldname, const char *newname); int renameat(int oldfd, const char *oldname, int newfd, const char *newname); 文件或目录可以用rename函数或者renameat函数进行重命名.有几种情况需要说明: 1.如果oldname指的是一个文件而不是目录,那么为该文件或符

Python中的文件和目录操作实现代码

对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数.重要的是,这些函数无论是在Unix.Windows还是Macintosh平台上,它们的使用方式是完全一致的. 本文将详细解释这些函数的使用方法.首先,我们介绍Python语言中类似于Windows系统的dir命令的列出文件功能,然后描述如何测试一个文件名对应的是一个标准文件.目录还是链接,以及提取文件大小和日期的方法.之后,我们还将介绍如何删除文

Python文件和目录操作实例代码

对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数.重要的是,这些函数无论是在Unix.Windows还是Macintosh平台上,它们的使用方式是完全一致的. 本文将详细解释这些函数的使用方法.首先,介绍Python语言中类似于Windows系统的dir命令的列出文件功能,然后描述如何测试一个文件名对应的是一个标准文件.目录还是链接,以及提取文件大小和日期的方法.之后,还将介绍如何删除文件和目录

文件和目录详解(一)---stat、lstat和fstat函数详解

记录文件属性的相关数据结构都是存在于内核空间中,在进程的用户空间中是直接访问不到这些数据结构的,只能通过操作系统提供的系统调用来访问.而stat等函数就是操作系统为用户进程提供的用来获取文件属性的系统调用. ======================================================= 函数原型: 函数参数: path:要操作文件的路径名 fd:要操作的文件描述符 buf:存放读取出来的文件属性 返回值: 调用成功时返回 0 调用失败时返回 -1 ========

常见的文件和目录函数

在APUE这本书,第三章与第四章都是在讲一些关于文件操作和目录操作的函数.简单地说明一下涉及到的函数及其使用. open函数 原型为: #include<fcntl.h> int open(const char *pathname, int oflag,.../*mode_t mode*/); 该函数是用来打开或创建一个文件(记住:是文件,不包括目录),第三个参数只有当打开文件不存在时(即open函数执行的是创建文件)才有用,mode_t是用来指定创建文件的用户ID,组ID,其他用户的读写权限