当前位置: 首页 > article >正文

笔记整理—内核!启动!—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为可重入的版本。


http://www.kler.cn/a/316644.html

相关文章:

  • 【JAVA基础】JVM是什么?
  • ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决
  • MySQL高级(二):一条更新语句是如何执行的
  • 【缺陷检测】Anomaly Detection via Reverse Distillation from One-Class Embedding
  • 深入探索:Scrapy深度爬取策略与实践
  • StructuredStreaming (一)
  • ruoyi-vue若依前端是如何防止接口重复请求
  • 计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-19
  • 【Linux 20】线程控制
  • Facebook开发者篇 - API拉取广告投放数据对接流程
  • D. Minimize the Difference (Codeforces Round 973 Div. 2)
  • 【人工智能学习笔记】7_智能语音技术基础
  • 【自定义函数】讲解
  • 香港科技大学广州|金融科技学域博士招生宣讲会——武汉大学、华中科技大学
  • 【算法】遗传算法
  • go语言基础入门(一)
  • 安全带检测系统源码分享
  • ArcGIS Pro SDK (十六)公共设施网络 2 网络图
  • MySQL篇(高级字符串函数/正则表达式)(持续更新迭代)
  • Web端云剪辑解决方案,BS架构私有化部署,安全可控
  • 【ARM】A64指令介绍及内存屏障和寄存器
  • 借用连接1-怎么从目标数据源借用连接
  • 【题解-力扣189. 轮转数组(java实现O(1)空间要求)】
  • Python3爬虫教程-HTTP基本原理
  • 数据结构--单链表创建、增删改查功能以及与结构体合用
  • Java 入门指南:JVM(Java虚拟机)—— 双亲委派模型(Parent Delegation Model)