自学内容网 自学内容网

笔记整理—内核!启动!—linux应用编程、网络编程部分(4)linux文件属性

        linux下文件类型的本质是将一切都视作文件,通过这样的文件系统本质上是简化了系统的难度(开发和使用难度)。

        常见的文件;

        普通文件->文本文件,是人能看懂的文字类型文件;二进制文件,计算机讷讷感看懂的文件。

        目录文件:标注文件夹的内容是一个特殊的文本,包括一些文件的相关信息,本身不适合用普通方式进行读写,可用专用的API进行访问。

        设备文件->对应硬件设备,是虚拟文件其中包括字符设备文件、块设备文件,均用特殊API进行访问。

        管道文件:一种通信手段。

        套接文件:网络相关的文件。

        符号链接文件:软链接、硬链接相关。

        文件属性获取可用通过stat指令进行获取。文件属性还可以用API进行查看,stat、fstat、lstat。三者返回的都与一个结构体相关struct stat。结构体原型位置在<sys/stat.h>,该结构体包括了能提供的所有文件信息, 其中一项为st_mode,其本质是一个标志位,存储的每一位都有自己的意义,使用S_ISREG()等一列的宏进行解析。

S_ISREG()    是否为普通文件
S_ISDIR()    是否为文件夹
S_ISCHR()    是否为字符文件
S_ISBLK()    是否为块设备文件
S_ISFIFO()   是否为FIFO文件
S_ISLNK()    是否为符号链接
S_SSCCK()    是否为sock文件

均是查看其返回值是否为1进行判断

        st_mode还记录了文件的权限,是使用位掩码宏去进行快速查询的。用法比较抽象

result=(buf,st_mode&S_IRUSR)>>8;

        用户是否对查询文件有相应读权限。所属组用S_IRGRP,S_IROTH位别的用户。

        st_mode本质是一个32位的数,可用专门的宏做掩码进行信息查询。

        access函数物理当前用户是否有权限都可以查看权限:F_OK文件是否存在、R_OK文件是否可读、W_OK是否可写、X_OK是否可执行。同样是检查是否返回1

ret=access(name,F_OK);

        chmod与fchmod,chmod只有root用户可进行权限修改。

ret=chmod(name,S_IRUSR|S_IWUSR|S_IXUSR);将文件改为可读可写可执行的文件
但是该权限是对user用户而言的,对组和其他用户无效

        fchmod是从open中进行权限的修改,chown/fchown/lchown改属主,chgrp/fchgrp改属主组。

        umask文件掩码,用于设置新文件的默认权限,umask的权值相加位7,umask 0000所有权限都有,但默认没有x也就是执行,要手动添加。

        umask/chmod/chxxx都是API,在man2可查。

        opendir/readdir读取目录文件。opendir得到一个DIR指针给readdir使用,readdir调用一次就会返回一个struct,本质是一个目录项,如果有8个文件就要调用八次,readdir不会对内容重复调用返回同一个文件,返回NULL就说明没文件了。

struct dirent *PEnt=NULL;
DIR *pDIr=NULL;
PDir=opendir(name);
PEnt=readdir(PDir);
while(NULL!=PEnt)
{
    printf();
    PEnt=readdir(PDir);
}

        重入函数与不可重入函数,readdir与一般的函数不同,定义一种指针不去分配空间也能用,说明readdir在维护相关指针;readdir不会重复申请内存,多次调用的关联的,是这个函数不可重入;多次调用之间是关联的,这个关联表面这个函数不可重入,不会从头再来,多次调用有因果关系。readdir_r为可重入的版本。


原文地址:https://blog.csdn.net/qq_35229394/article/details/142462062

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!