• 文件和目录,主要讲解文件属性



    1.函数相关的关系

    int fstatat(int fd,const char *restrict pathname,struct stat *restrict buf,int flag)
    在这里共性的一些东西

    1)关于fd与pathname,当pathname是绝对路径的时候忽略fd

    2)当fd是AT_FDCWD的时候,表明是基于当前工作目录下的pathname

    3)当fd是其他的打开目录的时候,则相对于其他的目录

    4)flag是控制是否跟随符号连接的

    2.stat结构体

    本章的函数基本上是围绕这个结构体来展开的,说明了文件的各种属性

    1:st_mode里面包含有

    文件的类型:FIFO,普通文件,目录文件,块文件,字符文件

    设置用户ID和设置组ID:如果设置了,择可以让进程的有效用户和有效用户组变成文件的用户和用户组

    与进程相关的ID有六个,分别是实际用户ID,实际组ID

    有效用户ID,有效组ID 附属组ID

    保存的设置用户ID,保存的设置组ID

    其中进程的ID和文件的所属者和所属组ID,虽然都是一个数字对应这root或者别的用户(用户组),但是进程的实际ID确实来自登陆用户所确定的,更改一个程序文件的所属用户并不能改变执行此程序时的实际用户ID,实际用户ID只与登陆时的有关

    文件的访问权限:用户读写执行,用户组读写执行,其他读写执行(列如,对一个文件的写权限决定了是否能够打开文件进行写操作,是先有了写权限,采取测试能不能以写方式去打开文件,读,执行是类似的

    粘着位:当对目录设置了粘着位的时候,对目录底下的文件删除必须如下:拥有此文件,拥有此目录,是超级用户

    相关函数

    1.1umask相关

    当umask设置了哪几位的时候,在创建文件时候,即指定了文件的mode的时候,就相应的屏蔽掉哪几位

    列如umask(S_IRGRP)

    creat("bar",RWRWRW);

    就屏蔽掉组读

    新文件和目录的所有权

    新文件的用户ID被设置成进程的有效ID,组ID?

    对于linux,如果文件所在目录的设置组ID位被设置,则新文件的组ID设置位目录的组ID,否则为进程的组ID

    1.2关于chmod的一个函数

    int fchmodat(int fd,const char *pathname,mode_t mode,int flag);

    1)关于fd与pathname,当pathname是绝对路径的时候忽略fd

    2)当fd是AT_FDCWD的时候,表明是基于当前工作目录下的pathname

    3)当fd是其他的打开目录的时候,则相对于其他的目录

    4)flag是控制是否跟随符号连接的

    注意 chmod是可以置设置用户位为1,也可以设置设置用户组为1,还可以设置粘着位

    chmod改变的只是I节点的信息,而ls -l显示的是文件内容最近的改变,所以并不变化时间

    2.st_uid,stgid

    分别是用户和用户组,可以改变的函数是chown,fchown

    在linux中,我们总是对这几个函数有限制的,只有超级用户能够更改文件用户ID

    如果进程拥有次文件,并且参数own应该为-1或者用户ID时,group可以是有效组ID或者进程的附属组ID之一,并且应该清除设置用户ID和设置组ID

    3.st_size

    对于连接文件长度是连接名称的长度

    4.st_blksize

    文件I/O比较合适的块长度

    5.st_blocks

    所分配的实际512字节块块数

    6.st_nlink

    连接数目,有几个硬链接,应用的函数有unlink函数,link,unlinkat函数

    其实和remove函数是一样的,删除一个文件只不过是将其连接数减1,如果减到0,则进行删除

    7st_ino

    此文件的i节点位置,i节点的编号,一个目录项的i节点编号不能指向其他的文件系统,因为在一个文件系统中的i节点编号是从0开始的

    8st_atim文件数据的最后访问时间,st_mtim文件数据的最后修改时间,st_ctim i节点最后修改的时间





  • 相关阅读:
    职业规划 !!
    linux上ssh配置指南
    低内存VPS用轻量级的Dropbear替换OpenSSH
    修改shell终端提示信息
    减少windows7内存占用的优化方案(内存占用才285兆 比XP还省)
    linux下提示符修改
    mysql存储过程学习笔记区块,条件,循环
    Apache下实现禁止目录浏览
    [学习指导] linux 启动过程以及 /etc/rc.d/init.d/目录的一点理解
    mysql 5.0存储过程学习总结
  • 原文地址:https://www.cnblogs.com/SmileLion/p/5863573.html
Copyright © 2020-2023  润新知