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

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 函数库参考手册》

Linux---stat函数以及自己实现stat_第1张图片

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

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

文件属性:

Linux---stat函数以及自己实现stat_第2张图片

Linux---stat函数以及自己实现stat_第3张图片

Linux---stat函数以及自己实现stat_第4张图片

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

#include
#include
#include
#include
#include
#include
#include

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

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

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

    printf("total size ,in bytes is: %d\n",buf.st_size);//文件大小,以字节计算
    printf("blocksize for filesystem I/O is: %d\n",buf.st_blksize);//文件系统IO缓冲区大小
    printf("number of blocks allocated is: %d\n",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;
}

Linux---stat函数以及自己实现stat_第5张图片

Linux---stat函数以及自己实现stat_第6张图片

你可能感兴趣的:(Linux入门基础)