精华内容
下载资源
问答
  • fstat

    2019-10-05 14:12:09
    相关函数:stat, lstat, chmod, chown, readlink, utime 头文件:#include <sys/stat.h> #include <unistd.h>...函数说明:fstat()用来将参数fildes 所指的文件状态, 复制到参数bu...

    相关函数: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函数

    千次阅读 2017-10-12 19:55:01
    stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。 1 首先隆重介绍的是一个非常重要的”VIP”人物,他是fstat, stat和lstat三者...

    转载自:http://blog.csdn.net/dumgeewang/article/details/7741033

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

    1

    首先隆重介绍的是一个非常重要的”VIP”人物,他是fstat, stat和lstat三者都要用到的一个结构体类型,名字叫做struct stat。可以说,没有这个struct stat的支持,上述三个系统调用将寸步难行。

    这个struct stat结构体在不同的UNIX/Linux系统中的定义是有小的区别的,但你完全不用担心,这并不会影响我们的使用。

    在struct stat结构体中我们常用的且各个平台都一定有的域是:

    st_mode 文件权限和文件类型信息 (记住这个黑体橘红色)

    st_ino   与该文件关联的inode

    st_dev   保存文件的设备

    st_uid   文件属主的UID号

    st_gid   文件属主的GID号

    st_atime 文件上一次被访问的时间

    st_ctime 文件的权限、属主、组或内容上一次被修改的时间

    st_mtime 文件的内容上一次被修改的时间。(和st_ctime的不同之处显而易见)

    st_nlink  该文件上硬连接的个数

    我分别提取了solaris(UNIX)和fedora(Linux)的struct stat结构体的原始定义:大家可以自己比对一下便可以发现两者确实有所不同,但主要的域是完全相同的。

    solaris的struct stat定义:

    struct stat {
    dev_t           st_dev;
    ino_t           st_ino;
    mode_t          st_mode;
    nlink_t         st_nlink;
    uid_t           st_uid;
    gid_t           st_gid;
    dev_t           st_rdev;
    off_t           st_size;
    timestruc_t     st_atim;
    timestruc_t     st_mtim;
    timestruc_t     st_ctim;
    blksize_t       st_blksize;
    blkcnt_t        st_blocks;
    char            st_fstype[_ST_FSTYPSZ];
    };

    fedora的struct stat定义:

    struct stat
    {
    __dev_t st_dev;                     /* Device.  */
    unsigned short int __pad1;
    __ino_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.  */
    unsigned short int __pad2;
    __off_t st_size;                    /* Size of file, in bytes.  */
    __blksize_t st_blksize;             /* Optimal block size for I/O.  */
    __blkcnt_t st_blocks;               /* Number 512-byte blocks allocated. */
    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.  */
    unsigned long int __unused4;
    unsigned long int __unused5;
    };

    2

    大家一定注意到了,在上面列举域的时候,我在st_mode处使用了黑体橘红色标识,原因在于这个域不像其他域那么容易使用,其他的域的值显而易见,而st_mode域是需要一些宏予以配合才能使用的。其实,通俗说,这些宏就是一些特定位置为1的二进制数的外号,我们使用它们和st_mode进行”&”操作,从而就可以得到某些特定的信息。

    文件类型标志包括:

    S_IFBLK:文件是一个特殊的块设备

    S_IFDIR:文件是一个目录

    S_IFCHR:文件是一个特殊的字符设备

    S_IFIFO:文件是一个FIFO设备

    S_IFREG:文件是一个普通文件(REG即使regular啦)

    S_IFLNK:文件是一个符号链接

    其他模式标志包括:

    S_ISUID:文件设置了SUID位

    S_ISGID:文件设置了SGID位

    S_ISVTX:文件设置了sticky位

    用于解释st_mode标志的掩码包括:

    S_IFMT:文件类型

    S_IRWXU:属主的读/写/执行权限,可以分成S_IXUSR, S_IRUSR, S_IWUSR

    S_IRWXG:属组的读/写/执行权限,可以分成S_IXGRP, S_IRGRP, S_IWGRP

    S_IRWXO:其他用户的读/写/执行权限,可以分为S_IXOTH, S_IROTH, S_IWOTH

    还有一些用于帮助确定文件类型的宏定义,这些和上面的宏不一样,这些是带有参数的宏,类似与函数的使用方法:

    S_ISBLK:测试是否是特殊的块设备文件

    S_ISCHR:测试是否是特殊的字符设备文件

    S_ISDIR:测试是否是目录(我估计find . -type d的源代码实现中就用到了这个宏)

    S_ISFIFO:测试是否是FIFO设备

    S_ISREG:测试是否是普通文件

    S_ISLNK:测试是否是符号链接

    S_ISSOCK:测试是否是socket

    3

    我们已经学习完了struct stat和各种st_mode相关宏,现在就可以拿它们和stat系统调用相互配合工作了!

    int fstat(int filedes, struct stat *buf);

    int stat(const char *path, struct stat *buf);

    int lstat(const char *path, struct stat *buf);

    聪明人一眼就能看出来fstat的第一个参数是和另外两个不一样的,对!fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是 一个“文件描述符”,而另外两个则直接接受“文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。

    stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat比stat多了一个l,因此它是有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而 stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)

    展开全文
  • fstat这个函数可以避免这些问题。 参考百度:http://baike.baidu.com/link?url=wh6msZkLUlTCx8P6YzujB3YoHaLLVaO68sQIIPR6ICj1yXYJxHfTDvxFwzjJ4YlpZZ8IDsKhKyf9EaCHo4ARHa 函数原型:int fstat(int fildes, ...
  • 主要介绍了node.js中的fs.fstat方法使用说明,本文介绍了fs.fstat的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
  • 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。

    这个struct stat结构体在不同的UNIX/Linux系统中的定义是有小的区别的,但你完全不用担心,这并不会影响我们的使用。

    在struct stat结构体中我们常用的且各个平台都一定有的域是:

    st_mode 文件权限和文件类型信息 

    st_ino   与该文件关联的inode

    st_dev   保存文件的设备

    st_uid   文件属主的UID号

    st_gid   文件属主的GID号

    st_atime 文件上一次被访问的时间

    st_ctime 文件的权限、属主、组或内容上一次被修改的时间

    st_mtime 文件的内容上一次被修改的时间。(和st_ctime的不同之处显而易见)

    st_nlink  该文件上硬连接的个数

    我分别提取了solaris(UNIX)和fedora(Linux)的struct stat结构体的原始定义:大家可以自己比对一下便可以发现两者确实有所不同,但主要的域是完全相同的。

    solaris的struct stat定义:

    struct stat {
    dev_t           st_dev;
    ino_t           st_ino;
    mode_t          st_mode;
    nlink_t         st_nlink;
    uid_t           st_uid;
    gid_t           st_gid;
    dev_t           st_rdev;
    off_t           st_size;
    timestruc_t     st_atim;
    timestruc_t     st_mtim;
    timestruc_t     st_ctim;
    blksize_t       st_blksize;
    blkcnt_t        st_blocks;
    char            st_fstype[_ST_FSTYPSZ];
    };

    fedora的struct stat定义:

    struct stat
    {
    __dev_t st_dev;                     /* Device.  */
    unsigned short int __pad1;
    __ino_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.  */
    unsigned short int __pad2;
    __off_t st_size;                    /* Size of file, in bytes.  */
    __blksize_t st_blksize;             /* Optimal block size for I/O.  */
    __blkcnt_t st_blocks;               /* Number 512-byte blocks allocated. */
    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.  */
    unsigned long int __unused4;
    unsigned long int __unused5;
    };

    2

    大家一定注意到了,在上面列举域的时候,我在st_mode处使用了粉色标识,原因在于这个域不像其他域那么容易使用,其他的域的值显而易见,而st_mode域是需要一些宏予以配合才能使用的。其实,通俗说,这些宏就是一些特定位置为1的二进制数的外号,我们使用它们和st_mode进行”&”操作,从而就可以得到某些特定的信息。

    文件类型标志包括:

    S_IFBLK:文件是一个特殊的块设备

    S_IFDIR:文件是一个目录

    S_IFCHR:文件是一个特殊的字符设备

    S_IFIFO:文件是一个FIFO设备

    S_IFREG:文件是一个普通文件(REG即使regular啦)

    S_IFLNK:文件是一个符号链接

    其他模式标志包括:

    S_ISUID:文件设置了SUID位

    S_ISGID:文件设置了SGID位

    S_ISVTX:文件设置了sticky位

    用于解释st_mode标志的掩码包括:

    S_IFMT:文件类型

    S_IRWXU:属主的读/写/执行权限,可以分成S_IXUSR, S_IRUSR, S_IWUSR

    S_IRWXG:属组的读/写/执行权限,可以分成S_IXGRP, S_IRGRP, S_IWGRP

    S_IRWXO:其他用户的读/写/执行权限,可以分为S_IXOTH, S_IROTH, S_IWOTH

    还有一些用于帮助确定文件类型的宏定义,这些和上面的宏不一样,这些是带有参数的宏,类似与函数的使用方法:

    S_ISBLK:测试是否是特殊的块设备文件

    S_ISCHR:测试是否是特殊的字符设备文件

    S_ISDIR:测试是否是目录(我估计find . -type d的源代码实现中就用到了这个宏)

    S_ISFIFO:测试是否是FIFO设备

    S_ISREG:测试是否是普通文件

    S_ISLNK:测试是否是符号链接

    S_ISSOCK:测试是否是socket

    3

    我们已经学习完了struct stat和各种st_mode相关宏,现在就可以拿它们和stat系统调用相互配合工作了!

    int fstat(int filedes, struct stat *buf);

    int stat(const char *path, struct stat *buf);

    int lstat(const char *path, struct stat *buf);

    聪明人一眼就能看出来fstat的第一个参数是和另外两个不一样的,对!fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是 一个“文件描述符”,而另外两个则直接接受“文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。

    stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat比stat多了一个l,因此它是有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而 stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)

     

     

     

     

     

     

     

     

     

     

    展开全文
  • FSTAT 遗传分析

    2011-08-08 15:25:04
    FSTAT 通过共显性标记检测遗传分化和基因多样性的一款遗传分析软件
  • fs.stat和fs.fstat他们的方法功能是一样的,都是获取文件的状态信息,本文主要介绍的是关于node.js中fs.stat与fs.fstat区别的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: fs.stat用法: fs.stat('....
  • fstat遗传分析软件

    2013-07-19 10:40:26
    FSTAT 通过共显性标记检测遗传分化和基因多样性的一款遗传分析软件
  • fstat函数使用

    千次阅读 2015-06-22 11:17:57
    一、fstat 函数 功能:由文件描述符取得文件状态。 相关函数:stat 、lstat 、chmod 、chown 、readlink 、utime。 头文件: #include  #include 函数声明: int fstat (int filedes,...
    一、fstat 函数
     
    

    功能:由文件描述符取得文件状态。

    相关函数:stat 、lstat 、chmod 、chown 、readlink 、utime。

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

    函数声明: int fstat (int filedes,struct *buf);

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

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

    下面举一个小例子:
    ------------------------------
    #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结构体

    定义如下:

    struct stat { 
             dev_t st_dev; // 文件所在设备ID 
             ino_t st_ino; // 结点(inode)编号  
             mode_t st_mode; // 保护模式 
             nlink_t st_nlink; // 硬链接个数  
             uid_t st_uid; // 所有者用户ID  
             gid_t st_gid; // 所有者组ID  
             dev_t st_rdev; // 设备ID(如果是特殊文件) 
             off_t st_size; // 总体尺寸,以字节为单位 
             blksize_t st_blksize; // 文件系统 I/O 块大小
             blkcnt_t st_blocks; // 已分配 512B 块个数
             time_t st_atime; // 上次访问时间 
             time_t st_mtime; // 上次更新时间 
             time_t st_ctime; // 上次状态更改时间 
    };

    st_dev 字段描述该文件所在的设备。(major() 和minor()宏可能在分析这个设备ID域时有用。)

    st_rdev 字段描述这个文件(inode)本身代表的设备。

    st_size 字段给出文件字节尺寸(如果它是一个普通文件或符号链接)。对于符号链接而言是它所有包含路径名长度,不包括结尾的空字符。

    st_blocks 字段指明文件已经分配数据块的个数,数据块以 512 字节为单位。(这可能小于 st_size/512,当文件有空洞时。)

    st_blksize 给出对于高效文件系统 I/O 操作的优先块尺寸。(数据以小尺寸块写入文件时可能导致低效的 读-更改-覆盖 操作。)

    不是所有的 Linux 文件系统实现了所有的时间域。一些文件系统允许挂载时不去访问文件或目录且不会导致st_atime 字段更新。(参考 mount() 的 noatimenodiratime 和 relatime,以及mount() 中相关的信息。)此外,如果文件以 O_NOATIME 标志打开,st_atime 不会被更新。

    st_atime 字段在文件访问时更改,比如,execve()、mknod()、pipe()、utime() 和read()(多于零个字节)。

    域 st_mtime 在文件更改时更新,比如,mknod()、truncate()、utime() 和 write()(多于零个字节)。再者,一个目录的 st_mtime 在这个目录里创建或删除文件时更新。st_mtime 在更改所有者、组、硬链接个数或权限模式时 不会 更新。

    st_ctime 字段在写入或设置结点(inode)信息(如所有者、组、链接数、权限等等)时会更改。

    下面 POSIX 宏用于使用 st_mode 字段测试文件类型:

    S_ISREG(m)
    它是普通文件吗?
    S_ISDIR(m)
    目录吗?
    S_ISCHR(m)
    字符设备?
    S_ISBLK(m)
    块设备?
    S_ISFIFO(m)
    FIFO(命名管道)?
    S_ISLNK(m)
    符号链接?(不在 POSIX.1-1996。)
    S_ISSOCK(m)
    套接口?(不在 POSIX.1-1996。)

    下面标志为 st_mode 域定义:

    S_IFMT 0170000 文件类型位域掩码
    S_IFSOCK 0140000 套接口
    S_IFLNK 0120000 符号链接
    S_IFREG 0100000 普通文件
    S_IFBLK 0060000 块设备
    S_IFDIR 0040000 目录
    S_IFCHR 0020000 字符设备
    S_IFIFO 0010000 FIFO
    S_ISUID 0004000 设置 UID 位
    S_ISGID 0002000 设置 组ID 位 (看下面)
    S_ISVTX 0001000 粘滞位(看下面)
    S_IRWXU 00700 文件所有者权限掩码
    S_IRUSR 00400 所有者有读权限
    S_IWUSR 00200 所有者有写权限
    S_IXUSR 00100 所有者有执行权限
    S_IRWXG 00070 组权限掩码
    S_IRGRP 00040 组有读权限
    S_IWGRP 00020 组有写权限
    S_IXGRP 00010 组有执行权限
    S_IRWXO 00007 其他用户权限掩码(不在组内)
    S_IROTH 00004 其他有读权限
    S_IWOTH 00002 其他有写权限
    S_IXOTH 00001 其他有执行权限

    设置组ID位S_ISGID)有多个特殊用处。对于一个目录而言,它指明 BSD 语义应用到这个目录;创建的文件继承其父目录的组ID,而不是来自创建进程的有效组ID,并且创建的目录同时也会获得 S_SIGID 位设置。对于一个没有组执行权限位(S_IXGRP)文件而言,设置组ID位用于指明托管文件/记录锁。

    在目录上的粘滞位(S_ISVTX)表示目录里的文件只有其所有者,目录所有者,和特权进程,可以对其进行重命名或删除。

    展开全文
  • 编译代码遇到了这样的问题: “hidden symbol `fstat' in /CodeSourcery-master/bin/../arm-xilinx-linux-gnueabi/libc/usr/lib/libc_nonshared.a(fstat.oS) is referenced by DSO” 困扰很久,没找到具体的解决办法...
  • Linux函数fstat说明

    2015-09-20 11:27:53
    int fstat(int fd, struct stat *buf) 参数fd必须是用open调用返回的有效文件描述符。 使用stat获取文件信息。 第一个参数为文件描述符;第二个参数为结构体地址。 结构体stat说明: struct stat {  dev_
  • fstat、stat和lstat 区别

    2019-07-01 14:50:54
    ntfstat(intfiledes,structstat*buf); intstat(constchar*path,structstat*buf);...一眼就能看出来fstat的第一个参数是和另外两个不一样的,fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的...
  • linux获取文件大小的函数fstat()

    万次阅读 2017-03-03 09:11:27
    C语言fstat()函数:由文件描述词取得文件状态 头文件:#include #include 定义函数:int fstat(int fildes, struct stat *buf); 函数说明:fstat()用来将参数fildes 所指的文件状态, 复制到参数buf ...
  • C语言fstat()函数:由文件描述词取得文件状态 相关函数:stat, lstat, chmod, chown, readlink, utime头文件:#include #include 定义函数:int fstat(int fildes, struct stat *buf);函数说明:fstat()用来将参数...
  • fileno, stat, fstat以及struct stat结构体(获取文件详细信息).pdf
  • fstat stat lstat

    2012-04-20 10:19:42
    fstat、stat和lstat 区别(转) stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。 1 首先隆重介绍的是一个非常重要的”VIP”人物...
  • 日常笔记之fstat函数

    2017-11-25 10:21:38
    fstat函数及struct stat结构(2011-08-04 17:29:10) 转载▼ 标签: 杂谈 分类: Linux 一、fstat 函数 功能:由文件描述符取得文件状态。 相关函数:stat 、lstat 、chmod 、chown 、readlink 、utime...
  • fstat()函数

    2014-11-08 12:45:59
    fstat 功能: 获得文件或共享内存区的信息 头文件: #include  #include  #include  函数原形: int stat(const char *file_name,struct stat *buf); 参数: file_name 文件名 buf stat结构 返回值...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,289
精华内容 5,315
关键字:

fstat