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

来源:互联网 发布:淘宝海运到美国 编辑:程序博客网 时间:2024/05/21 14:50

St_mode函数S_IFMT      0170000     文件类型的位S_IFSOCK    0140000     socketS_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>\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;}