当前位置: 首页 > 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/news/316644.html

相关文章:

  • 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)
  • 2024短剧系统开发,付费短剧小程序app源码教程,分销功能讲解搭建上线
  • 【UI自动化】前言
  • 服务器相关问题
  • 机器学习及其应用领域【金融领域】
  • css 控制虚线刻度尺寸
  • 【手写数据库内核组件】1001词法分析器,语言被程序识别的第一步,将语句分解为最小词根token
  • Qt 模型视图(二):模型类QAbstractItemModel
  • 可智能生成刺绣图案!武汉纺织大学可视计算与数字纺织团队发布首个多缝线刺绣生成对抗网络模型,被顶级期刊 TVCG 录用
  • 后端开发刷题 | 最长无重复子数组
  • ArcGIS Pro SDK (十六)公共设施网络 1 网络管理