精华内容
下载资源
问答
  • fstat
    2019-10-05 14:12:09

    相关函数:stat, lstat, chmod, chown, readlink, utime

    头文件:#include <sys/stat.h> #include <unistd.h>

    定义函数:int fstat(int fildes, struct stat *buf);

    函数说明:fstat()用来将参数fildes 所指的文件状态, 复制到参数buf 所指的结构中(struct stat). Fstat()与stat()作用完全相同, 不同处在于传入的参数为已打开的文件描述词. 详细内容请参考stat().

    返回值:执行成功则返回0, 失败返回-1, 错误代码存于errno.

    范例
    #include <sys/stat.h>
    #include <unistd.h>
    #include <fcntk.h>
    main()
    {
    struct stat buf;
    int fd;
    fd = open("/etc/passwd", O_RDONLY);
    fstat(fd, &buf);
    printf("/etc/passwd file size +%d\n ", buf.st_size);
    }
    执行:
    /etc/passwd file size = 705

    转载于:https://www.cnblogs.com/coding4/p/5604850.html

    更多相关内容
  • fstat这个函数可以避免这些问题。 参考百度:http://baike.baidu.com/link?url=wh6msZkLUlTCx8P6YzujB3YoHaLLVaO68sQIIPR6ICj1yXYJxHfTDvxFwzjJ4YlpZZ8IDsKhKyf9EaCHo4ARHa 函数原型:int fstat(int fildes, ...
  • fs.fstat(fd, [callback(err, stats)]) 由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) ) 接收参数: fd 文件描述符 callback 回调,传递2个参数,异常参数err 和 文件信息参数 stats ...
  • C语言 fstat函数

    千次阅读 2022-02-07 09:32:45
    文章目录系列文章目录前言一、stat系统调用二、fstat1.功能2.相关函数3.头文件4.函数声明5.描述6.返回值7.例子三、struct stat结构体 前言 一、stat系统调用 stat系统调用系列包括了fstat、stat和lstat,它们都是...

    系列文章目录


    前言

    一、stat系统调用

    stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。

    二、fstat

    1.功能

    由文件描述符取得文件的状态。

    2.相关函数

    stat、lstat、chmod、chown、readlink、utime。

    3.头文件

    #include <sys/stat.h>
    #include <unistd.h>
    

    4.函数声明

    int fstat (int filedes, struct *buf);
    

    5.描述

    fstat() 用来将参数filedes 所指向的文件状态复制到参数buf 所指向的结构中(struct stat), fstat() 与stat() 作用完全相同,不同之处在于传入的参数为已打开的文件描述符。

    6.返回值

    执行成功返回0,失败返回-1,错误代码保存在errno中。

    7.例子

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <fcntl.h>
    
    main()
    {
       struct stat buf;
       int fd;
       fd = open ("/etc/passwd", O_RDONLY);
       fstat (fd, &buf);
       printf("/etc/passwd file size = %d\n",(int)(buf.st_size));
    }
    

    执行结果:
    /etc/passwd file size = 1656

    三、struct stat结构体

    struct stat{
        __dev_t st_dev;		/* Device.  */
        __field64(__ino_t, __ino64_t, st_ino);  /* File serial number. */
        __mode_t st_mode;		/* File mode.  */
        __nlink_t st_nlink;		/* Link count.  */
        __uid_t st_uid;		/* User ID of the file's owner.	*/
        __gid_t st_gid;		/* Group ID of the file's group.*/
        __dev_t st_rdev;		/* Device number, if device.  */
        __dev_t __pad1;
        __field64(__off_t, __off64_t, st_size);  /* Size of file, in bytes. */
        __blksize_t st_blksize;	/* Optimal block size for I/O.  */
        int __pad2;
        __field64(__blkcnt_t, __blkcnt64_t, st_blocks);  /* 512-byte blocks */
    #ifdef __USE_XOPEN2K8
        /* Nanosecond resolution timestamps are stored in a format
           equivalent to 'struct timespec'.  This is the type used
           whenever possible but the Unix namespace rules do not allow the
           identifier 'timespec' to appear in the <sys/stat.h> header.
           Therefore we have to handle the use of this header in strictly
           standard-compliant sources special.  */
        struct timespec st_atim;		/* Time of last access.  */
        struct timespec st_mtim;		/* Time of last modification.  */
        struct timespec st_ctim;		/* Time of last status change.  */
    # define st_atime st_atim.tv_sec	/* Backward compatibility.  */
    # define st_mtime st_mtim.tv_sec
    # define st_ctime st_ctim.tv_sec
    #else
        __time_t st_atime;			/* Time of last access.  */
        unsigned long int st_atimensec;	/* Nscecs of last access.  */
        __time_t st_mtime;			/* Time of last modification.  */
        unsigned long int st_mtimensec;	/* Nsecs of last modification.  */
        __time_t st_ctime;			/* Time of last status change.  */
        unsigned long int st_ctimensec;	/* Nsecs of last status change.  */
    #endif
        int __glibc_reserved[2];
    };
    
    展开全文
  • fstat函数的使用

    2022-02-09 17:04:04
    于是找到了函数fstat,在设置fd后,调用fstat获取文件状态,如果获取失败可能是导致select失败的原因,但这里只记录fstat的用法,不纠结select失败的原因。 #include #include #include #include #include #include ...

    今天在排查一个问题,在使用select函数的时候,返回-1,errno=EBADF,表示的错误字符为:An invalid file descriptor was given in one of the sets. (Perhaps a file descriptor that was already closed, or one on which an error has occurred.),源码里加了一点打印,如下:

     设置完select的参数后马上调用了select,然后就返回错误了。于是找到了函数fstat,在设置fd后,调用fstat获取文件状态,如果获取失败可能是导致select失败的原因,但这里只记录fstat的用法,不纠结select失败的原因。

    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <stdint.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <errno.h>
    
    int main()
    {
        int32_t  fd = socket(AF_INET, SOCK_STREAM, 0);
        struct stat fdStat;
        if(fstat(fd, &fdStat) == 0)
        {
            printf("select set fd = %d, type = %07o, isSock? = %d\n", fd, fdStat.st_mode & S_IFMT, S_ISSOCK(fdStat.st_mode));
        }
        else
        {
            printf("fstat error msg = %s\n", strerror(errno));
        }
    
        close(fd);
        return 0;
    }

    函数成功时,打印了该fd的类型,及判断是否是socket类型。

    涉及到的相关宏:用于判断是否是指定类型

    #define	S_ISBLK(m)	(((m)&_IFMT) == _IFBLK)
    #define	S_ISCHR(m)	(((m)&_IFMT) == _IFCHR)
    #define	S_ISDIR(m)	(((m)&_IFMT) == _IFDIR)
    #define	S_ISFIFO(m)	(((m)&_IFMT) == _IFIFO)
    #define	S_ISREG(m)	(((m)&_IFMT) == _IFREG)
    #define	S_ISLNK(m)	(((m)&_IFMT) == _IFLNK)
    #define	S_ISSOCK(m)	(((m)&_IFMT) == _IFSOCK)

    具体是何种类型的宏定义:这里是八进制表示形式

    #define	_IFMT		0170000	/* type of file */
    #define		_IFDIR	0040000	/* directory */
    #define		_IFCHR	0020000	/* character special */
    #define		_IFBLK	0060000	/* block special */
    #define		_IFREG	0100000	/* regular */
    #define		_IFLNK	0120000	/* symbolic link */
    #define		_IFSOCK	0140000	/* socket */
    #define		_IFIFO	0010000	/* fifo */

    很显明要判断是何种类型,即用st_mode & _IFMT 即可。而_IFMT又被定义为宏:

    #define	S_IFMT		_IFMT
    #define	S_IFDIR		_IFDIR
    #define	S_IFCHR		_IFCHR
    #define	S_IFBLK		_IFBLK
    #define	S_IFREG		_IFREG
    #define	S_IFLNK		_IFLNK
    #define	S_IFSOCK	_IFSOCK
    #define	S_IFIFO		_IFIFO

    所以:fdStat.st_mode & S_IFMT 得到该fd的类型,运行结果如:

     type = 0140000,根据上面的宏定义,即为socket类型。

    展开全文
  • fs.stat和fs.fstat他们的方法功能是一样的,都是获取文件的状态信息,本文主要介绍的是关于node.js中fs.stat与fs.fstat区别的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: fs.stat用法: fs.stat('....
  • 函数原型#include int stat(const char*restrict pathname, struct stat *...int fstat(int filedes,struct stat *buf);通过文件描述符获取文件对应的属性。int lstat(const char*restrict pathname, struct s...

    函数原型#include

    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);

    连接文件描述命,获取文件属性。

    一眼就能看出来fstat的第一个参数是和另外两个不一样的,对!fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是

    一个“文件描述符”,而另外两个则直接接受“文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。

    stat

    和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat比stat多了一个l,因此它是有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而

    stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)2

    文件对应的属性

    struct stat {

    mode_t st_mode; //文件对应的模式,文件,目录等

    ino_t st_ino; //inode节点号

    dev_t st_dev; //设备号码

    dev_t st_rdev; //特殊设备号码

    nlink_t st_nlink; //文件的连接数

    uid_t st_uid; //文件所有者

    gid_t st_gid; //文件所有者对应的组

    off_t st_size; //普通文件,对应的文件字节数

    time_t st_atime; //文件最后被访问的时间

    time_t st_mtime; //文件内容最后被修改的时间

    time_t st_ctime; //文件状态改变时间

    blksize_t

    st_blksize; //文件内容对应的块大小

    blkcnt_t st_blocks; //伟建内容对应的块数量

    };

    可以通过上面提供的函数,返回一个结构体,保存着文件的信息.

    3

    获取文件属性的几个封装函数///

    // 功能说明 : 判断是否link文件

    // 输入参数 :

    // 输出参数 : VOID

    // 返回值 : YCPP_BOOL

    // 使用说明 :

    ///

    YCPP_BOOL IsLink ( const char * szDirName )

    {

    struct stat st;

    return ( lstat (szDirName, &st) == 0

    && S_ISLNK (st.st_mode) );

    }

    ///

    // 功能说明 : 判断是否block文件

    // 输入参数 :

    // 输出参数 : VOID

    // 返回值 : YCPP_BOOL

    // 使用说明 :

    ///

    YCPP_BOOL IsBlk ( const char * szDirName )

    {

    struct stat st;

    return ( lstat (szDirName, &st) == 0

    && S_ISBLK (st.st_mode) );

    }

    ///

    // 功能说明 : 判断是否FIFO文件

    // 输入参数 :

    // 输出参数 : VOID

    // 返回值 : YCPP_BOOL

    // 使用说明 :

    ///

    YCPP_BOOL IsFifo ( const char * szDirName )

    {

    struct stat st;

    return ( lstat (szDirName, &st) == 0

    && S_ISFIFO (st.st_mode) );

    }

    ///

    // 功能说明 : 判断是否目录文件

    // 输入参数 :

    // 输出参数 : VOID

    // 返回值 : YCPP_BOOL

    // 使用说明 :

    ///

    YCPP_BOOL IsDir ( const char * szDirName )

    {

    struct stat st;

    return ( lstat (szDirName, &st) == 0

    && S_ISDIR (st.st_mode) );

    }

    ///

    // 功能说明 : 判断是否设备文件

    // 输入参数 :

    // 输出参数 : VOID

    // 返回值 : YCPP_BOOL

    // 使用说明 :

    ///

    YCPP_BOOL IsDevice ( const char * szDirName )

    {

    struct stat st;

    return ( lstat (szDirName, &st) == 0

    && S_ISCHR (st.st_mode) );

    }

    ///

    // 功能说明 : 判断是否普通文件

    // 输入参数 :

    // 输出参数 : VOID

    // 返回值 : YCPP_BOOL

    // 使用说明 :

    ///

    YCPP_BOOL IsFile ( const char * szDirName )

    {

    struct stat st;

    return ( lstat (szDirName, &st) == 0

    && S_ISREG (st.st_mode) );

    }

    ///

    // 功能说明 : 判断是否可读

    // 输入参数 :

    // 输出参数 : VOID

    // 返回值 : YCPP_BOOL

    // 使用说明 :

    ///

    YCPP_BOOL canAccess ( const char *szFileName )

    {

    if( access(szFileName, R_OK) == 0 )

    return YCPP_TRUE;

    return YCPP_FALSE;

    }

    ///

    // 功能说明 : 判断是否可修改

    // 输入参数 :

    // 输出参数 : VOID

    // 返回值 : YCPP_BOOL

    // 使用说明 :

    ///

    YCPP_BOOL canModify ( const char *szFileName )

    {

    if ( access(szFileName, W_OK | R_OK) == 0 )

    return YCPP_TRUE;

    return YCPP_FALSE;

    }

    ///

    // 功能说明 : 获取文件上次修改时间

    // 输入参数 :

    // 输出参数 : VOID

    // 返回值 : YCPP_RET

    // 使用说明 :

    ///

    YCPP_RET FileLastMTime ( const char *szFileName )

    {

    struct stat st;

    memset ( &st, 0, sizeof(struct stat) );

    if ( lstat (szFileName, &st) == 0 )

    return st.st_mtime;

    printf ( "%s FileLastMTime error %sn", szFileName, strerror(errno)

    );

    return -1;

    }

    ///

    // 功能说明 : 获取文件大小,以字节为单位

    // 输入参数 :

    // 输出参数 : VOID

    // 返回值 : YCPP_RET

    // 使用说明 :

    ///

    YCPP_RET FileSize ( const char *szFileName )

    {

    struct stat st;

    memset ( &st, 0, sizeof(struct stat) );

    if ( lstat (szFileName, &st) == 0 )

    return st.st_size;

    printf ( "%s FileSize error %sn", szFileName, strerror(errno)

    );

    return -1;

    }

    展开全文
  • Linux函数fstat

    2021-10-12 14:45:12
    int fstat(int fd, struct stat *buf) 参数fd必须是用open调用返回的有效文件描述符。 使用stat获取文件信息。 第一个参数为文件描述符;第二个参数为结构体地址。 结构体stat说明: struct stat { dev_t st_dev; /*...
  • linux 文件属性信息(stat/fstat/lstat)

    千次阅读 2021-12-11 10:45:45
    本章主要讲解linux 中 stat函数,另外两个函数fstat和lstat功能和stat函数差不多就不做过多的讲解。 fstat函数与stat函数区别主要在于:fstat只获取普通文件的属性信息,看fstat输入参数便可知 lstat函数与stat函数...
  • C语言fstat()函数:由文件描述词取得文件状态头文件:#include #include 定义函数:int fstat(int fildes, struct stat *buf);函数说明:fstat()用来将参数fildes 所指的文件状态, 复制到参数buf 所指的结构中...
  • fstat函数

    千次阅读 2017-10-12 19:55:01
    stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。 1 首先隆重介绍的是一个非常重要的”VIP”人物,他是fstat, stat和lstat三者...
  • stat()/lstat()/fstat函数 功能 获取文件属性 定义函数 函数原型: int stat(const char *pathname, struct stat *buf); int lstat(const char *pathname, struct stat *buf); int fstat(int filedes, struct ...
  • stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。1首先隆重介绍的是一个非常重要的”VIP”人物,他是fstat,stat和lstat三者都要用到...
  • if (fstat(fd, &fstatbuf) ) { perror("fstat input file"); } printf("[fstat]test_50Byte.bin file size = [%ld] Byte\n\n", fstatbuf.st_size); close(fd); } int main() { int rval = 0; struct stat statbuf =...
  • linux c查看文件属性stat,lstat,fstat首页 计算机相关 linux系统编程 linux c查看文件属性stat,lstat,fstat文件属性也叫文件元数据。我们从系统调用stat() 开始讲,可利用其返回一个包含多种文件属性的结构。#...
  • fstat函数详解

    千次阅读 2018-08-20 11:00:00
    stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。 1 首先fstat, stat和lstat三者都要用到的一个结构体类型,名字叫做struct stat。...
  • stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。 1 首先fstat, stat和lstat三者都要用到的一个结构体类型,名字叫做struct stat。 ...
  • fstat遗传分析软件

    2013-07-19 10:40:26
    FSTAT 通过共显性标记检测遗传分化和基因多样性的一款遗传分析软件
  • 1、stat、fstat、lstat函数头文件及原型 查看男人手册第2页man 2 stat: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> struct stat { dev_t st_dev; /* 包含文件的设备的...
  • stat/fstat/lstat 获取文件的长度: int file_sizoe = fseek(fd,0,SEEK_END); //或者 struct stat file1; //stst(argv[1],&file1);//文件没有打开用这个 fstat(fd2,&file1);//文件打开了用这个 printf("file_size=%...
  • stat函数(stat、fstat、lstat)

    千次阅读 2019-12-23 13:40:51
    fstat函数与stat函数的功能一样,只是第一个形参是文件描述符。 int lstat(const char *path, struct stat *buf); lstat函数的形参跟stat函数的形参一样。其功能也跟stat函数功能一样,仅有一点不同:stat函数...
  • stat和fstat

    2016-09-19 07:57:53
    给定一个pathname,stat函数返回一个与此命名文件有关的信息结构,fstat函数获得已在描述符filedes上打开的文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息...
  • fstat() 函数

    千次阅读 2019-03-10 20:42:07
    查看更多 https://www.yuque.com/docs/share/2c94fff0-5000-4629-98b8-404565d2afee
  • fstat、stat和lstat 区别(转) stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。 1 首先隆重介绍的是一个非常重要的”VIP”人物,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,335
精华内容 6,134
关键字:

fstat