APUE学习笔记——文件目录
UNIX标准
- ISO C:提供C程序的可移植性,使其能适合于大量不同的操作系统,而不只是适合UNIX系统;
- POSIX:由IEEE制订的标准族,可移植操作系统接口,定义了操作系统必须提供的各种服务;
- Single UNIX Specification:定义了一些附加接口扩展了POSIX.1规范提供的功能。
程序中的限制
- 编译时限制:可在头文件中定义
limits.h
; - 运行时限制:要求进程调用一个函数获得限制值
sysconf()、pathconf()、fpathcof()
。
基本系统数据类型
头文件<sys/types.h>
定义了基本系统数据类型,绝大多数以_t
结尾,都是使用typedef
定义。
文件I/O
文件描述符:是一个非负整数,STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO
。
常见I/O函数:open()、openat()、create()、close()、lseek()、read()、write()
.
内核使用3种数据结构表示打开文件:
原子操作
任何要求多于两个函数调用的操作都不是原子操作,因为在两个函数调用之间,内核有可能临时挂起进程。
在打开文件时设置O_APPEND标志,这样做使得内核在每次写操作之前,都将进程的当前偏移量设置到该文件的尾端处。
相关函数:pread()、pwrite()
重定向
dup()、dup2()
同步I/O相关函数
sync()、fsync()、fdatasync()
修改已打开的文件属性
fcntl()
文件或目录信息获取
stat()、fstat()、lstat()、fstatat()
文件类型:
- 普通文件
- 目录文件
- 块特殊文件
- 字符特殊文件
- FIFO
- 套接字
- 符号链接
一个进程相关的ID
保存的设置用户ID和保存的设置组ID在执行一个程序时包含了有效用户ID和有效组ID的副本。相关函数setuid()
文件访问权限的一些规则
- 用名字打开任一类型的文件时,对该名字中包含的每一个目录,包括它可能隐含的当前工作目录都应具有执行权限。
- 为了在一个目录中创建一个新文件,必须对该目录具有写权限和执行权限。
- 为了删除一个现有文件,必须对包含该文件的目录具有写权限和执行权限。对该文件本身不需要读、写权限。
访问权限的测试
access()、faccessat()
文件模式创建屏蔽字
umask()
文件访问权限的修改
chmod()、fchmod()、fchmodat()
目录的粘着位
目录/tmp和/var/tmp是设置粘着位的典型候选者——任何用户都可以在这两个目录中创建文件。任一用户对这两个目录的权限都是读、写和执行。但是用户不应能删除或重命名属于其他人的文件,为此在这两个目录的文件模式中都设置了粘着位。
修改文件权限
chown()、fchown()、fchownat()、lchown()
链接相关
link()、linkat()、unlink()、unlinkat()、remove()
当使用以名字引用文件的函数时,应当了解该函数是否处理符号链接。
symlink()、symlinkat()、readlink()、readlinkat()
文件重命名
rename()、renameat()
文件时间相关
futimens()、utimensat()、utimes()
目录相关
mkdir()、mkdirat()、rmdir()、opendir()、fdopendir()、readdir()、rewinddir()、closedir()、telldir()、seekdir()、chdir()、fchdir()、getcwd()