牛骨文教育服务平台(让学习变的简单)
博文笔记

Linux---stat函数以及自己实现stat

创建时间:2017-07-14 投稿人: 浏览次数:662

St_mode函数
S_IFMT      0170000     文件类型的位
S_IFSOCK    0140000     socket
S_IFLNK     0120000     符号链接(symbolic link)
S_IFREG     0100000     一般文件
S_IFBLK     0060000     区块装置(block device)
S_IFDIR     0040000     目录
S_IFCHR     0020000     字符装置(character device)
S_IFIFO     0010000     先进先出(fifo)
S_ISUID     0004000     文件的(set user-id on execution)位
S_ISGID     0002000     文件的(set group-id on execution)位
S_ISVTX     0001000     文件的sticky位
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       其他用户具可执行权限
摘自《Linux C 函数库参考手册》

返回值:成功返回0,失败返回-1.

一旦给出pathname,stat函数将返回与此命名文件有关的信息结构,比如struct stat *statbuf;

文件属性:




/*************************************************************************
	> File Name: my_chmod.c  P162
	> Author: 
	> Mail: 
	> Created Time: 2017年07月14日 星期五 15时42分34秒
 ************************************************************************/

#include<stdio.h>
#include<time.h>
#include<sys/stat.h>
#include<unistd.h>
#include<sys/types.h>
#include<errno.h>
#include<stdlib.h>

int main(int argc, char **argv)
{
    struct stat buf;
    /*检查参数个数*/
    if(argc!=2)
    {
        perror("Usage:my_stat <filename>
");
        exit(1);
    }

    /*获取文件属性*/
    if( stat(argv[1], &buf) ==-1 )
    {
        perror("stat:");
        exit(1);
    }

    /*打印文件属性*/
    printf("device is: %d
",buf.st_dev);//文件设备编号
    printf("inode is : %d
",buf.st_ino);//文件i节点标号
    printf("mode is: %o
",buf.st_mode);//文件类型与存取权限
    printf("number of hard links is: %d
",buf.st_nlink);//硬链接数目
    printf("user ID of owner is: %d
",buf.st_uid);//用户所有者的用户id
    printf("group ID of owner is: %d
",buf.st_gid);//用户所有者组id
    printf("device type (if inode device )is: %d
",buf.st_rdev);//若为设备文件则为设备编号

    printf("total size ,in bytes is: %d
",buf.st_size);//文件大小,以字节计算
    printf("blocksize for filesystem I/O is: %d
",buf.st_blksize);//文件系统IO缓冲区大小
    printf("number of blocks allocated is: %d
",buf.st_blocks);//占有文件区块个数,一般一个区块大小通常512字节
    
    printf("time of lasst access is: %s",ctime(&buf.st_atime));//文件最近一次被访问时间
    printf("time of last modification is: %s",ctime(&buf.st_mtime));//最后一次被修改的时间
    printf("time of last chage is: %s",ctime(&buf.st_ctime));//最近一次被更改时间

    return 0;
}



声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。