APUE读书笔记(5) 文件和目录(下)

本文围绕UNIX系统中文件和目录操作展开。介绍了更改文件用户ID和组ID的函数,如chown等;说明了文件长度相关内容,包括不同文件类型长度特点及查看方式;还涉及文件截断、文件系统、链接操作、重命名、符号链接等操作的函数,以及文件时间、目录创建删除、读取等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第四章 文件和目录(下)

十一:函数chown、fchown、fchownat和lchown
  这几个函数都可用于更改文件的用户ID和组ID。原型如下:

#include <unistd.h>    
 
int chown(const char *pathname, uid_t owner, gid_t group);    
 
int fchown(int fd, uid_t owner, gid_t group);     
 
int fchownat(int fd, const char *pathname, uid_t owner, gid_t group, int flag);     
 
int lchown(const char *pathname, uid_t owner, gid_t group);     
 
4个函数的返回值:若成功,返回0;若出错,返回-1 

  其中需要注意几点:
  1. 当owner和group任意一个为-1的时候,不会有改动。
  2. 学了前面几章之后,我们很容易的摸索出来通过UNIX函数名来猜测他们的不同功能。
  3. 这里chown为基本函数;fchown是以文件描述符fd为传入参数;fchownat是根据flag参数不同可以设置绝对路径和相对路径。lchown在传入的文件路径所对应的文件时符号链接的情况下改变这个符号链接文件本身。
  4. fchownat函数有两种情况和lchown和fchown是相同的:flag为AT_FDCWD并且pathname为相对路径;pathname为绝对路径。这两种情况下,如果flag参数中清除了AT_SYMLINK_NOFOLLOW标志,则fchownat和chown行为相同,如果设置了这个参数,则和chown行为相同。
十二:文件长度
  stat结构成员st_size表示以字节为单位的文件的长度。但是这个字段你进队文件是普通文件、目录文件和符号链接文件的时候才有效。
  一般来说文件的长度无所谓,但是对于目录,其文件长度通常是16或者512的整数倍。
  对于符号链接文件,其文件长度是在文件名中的实际长度。
  du命令会报告文件的块数,一般单位可能是1024字节块,也可能是512字节块。这个却决于环境变量中,是否设置了参数POSIXLY_CORRECT。

有 POSIXLY_CORRECT ----> 1024
无 POSIXLY_CORRECT ----> 512

  如果文件中包含空洞,那么使用ls -l查看文件长度是会比文件实际的长度多,但是我们可以通过wc -c的方式来排除掉空洞的部分,得到文件的真实长度。
  值得注意的是,使用程序复制这个文件后,新的文件中的空洞会被0所填满。
十三:文件截断
  函数truncate和函数ftruncate可以截断文件。原型如下:

int truncate(const char *path, off_t length);
int ftruncate(int fd,off_t length);

十四:文件系统
  下图是UNIX文件系统的保存形式:
在这里插入图片描述
  对于目录项的i结点来说,会有一个链接计数,这个值代表了指向这个结点的目录项数。只有当这个数降为0的时候,我们才可以删除该文件。这也就是为什么解除对一个文件的链接并不代表释放该文件占用的磁盘块的原因。所以删除目录项的函数叫unlink而不是叫delete。
  任何一个页目录的链接计数都是2,这是因为有该目录和该目录中的.项。
十五:函数link、linkat、unlink、unlinkat、remove
  link和linkat函数可以创建一个指向现有文件的链接。这两个函数没什么好介绍的。
  unlink和unlinkat是删除目录项,但是经过十四小节的学习我们一定知道这个“删除”的含义代表着该文件的链接计数减一。对于remove函数,如果接触文件,那么remove功能和unlink类似,如果解除目录,那么remove功能和rmdir类似。
十六:函数rename和renameat
  这两个函数的功能是为文件重命名。
十七:符号链接
  符号链接是对一个文件的间接指针。与硬链接不同,符号链接是为了避开硬链接的一些限制。
  硬链接通常要求链接和文件在同一个文件系统中,而且只有超级用户才能创建指向目录的硬链接。
  符号链接就没有上述的限制。但是在使用符号链接的时候需要注意当我们使用一个函数来处理符号链接的时候,应当知道这个函数可不可以跟随符号链接指向到文件。下面列出那些函数跟随符号链接,哪些不跟随。
在这里插入图片描述
十八:创建和读取符号链接
  可以使用函数symlink和symlinkat函数创建一个符号链接。看到这种func和funcat的名字格式大家也都知道这两个函数该怎么用了,就不介绍了。
十九:文件的时间
  对于每个文件来说,它会维护三个时间字段

字段说明例子ls(l)选项
st_atim文件数据的最后访问时间read-u
st_mtim文件数据的最后修改时间write默认
st_ctimi节点状态的最后更改时间chmod、chown-c

二十:函数futimens、utimensat、utimes
  前两个函数可以得到一个文件的访问和修改时间,最后一个函数可以设定文件的st_atim和at_mtim。需要注意,st_ctim时间不能修改,因为在调用utimes这个函数的时候这个值就已经被修改了。
二十一:函数mkdir、mkdirat和rmdir
  这几个函数是用来创建目录和删除目录的,同理,这种func和funcat形式的函数就不介绍了。

二十二:读目录
  对于一个目录,只要对于他有访问权限的用户都可以读取,但是对于写目录,只有内核才能写。
二十三:函数chdir、fchdir和getcwd
  每个进程都有一个当前工作目录。对于结对路径没有什么好说的,对于相对路径,是跟你就/etc/passwd中的用户工作目录开始的,一般用户工作目录为/usr/username。前两个函数可以更改当前工作目录。
  getcwd函数提供了找到当前目录的完整路径的功能。

内容概要:文章详细介绍了电梯门禁(梯控)系统的硬件安装与接线要点。首先强调了梯控板与楼层按键对接的重要性,包括遵循一一对应原则以避免错层、越层问题,允许空层存在以适应实际需求。接着阐述了不同接线方式(COM、NO、NC端口的不同组合)对用户权限的影响,如单层权限用户刷卡直达指定楼层,多层权限用户在特定接线方式下的操作限制。硬件安装方面,强调了无源干触点设计原则以确保电气隔离,防止系统间干扰,以及读卡器接入时的规范要求。文章还介绍了梯控系统的技术原理,如身份验证机制(二维码/IC卡/人脸识别)、消防联动功能(紧急情况下释放所有楼层权限),并指出该系统适用于小区、写字楼等场景,支持机器人乘梯SDK扩展。最后,根据不同场景需求提出了适用的接线方式选择,如严格管控场景下选择4.3接线以实现精准权限控制,限制多层用户手动选层场景下选择4.1接线并配合软件权限设置。; 适合人群:从事电梯安装维护的技术人员、楼宇自动化工程师及相关领域的管理人员。; 使用场景及目标:①指导技术人员正确安装接线梯控系统,确保系统安全稳定运行;②帮助管理人员了解不同接线方式对用户权限的影响,以便根据实际需求选择合适的配置方案;③提升楼宇安全管理服务质量,特别是在小区、写字楼等场所的应用。; 其他说明:梯控系统的正确安装接线不仅关系到系统的正常运作,更直接影响到用户的安全使用体验。因此,在实际操作中务必严格按照规范执行,同时关注最新的技术发展应用场景变化,以确保系统始终处于最佳状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值