17 August 2014

UNIX标准


  1. ISO C:提供C程序的可移植性,使其能适合于大量不同的操作系统,而不只是适合UNIX系统;
  2. POSIX:由IEEE制订的标准族,可移植操作系统接口,定义了操作系统必须提供的各种服务;
  3. Single UNIX Specification:定义了一些附加接口扩展了POSIX.1规范提供的功能。

程序中的限制


  1. 编译时限制:可在头文件中定义limits.h
  2. 运行时限制:要求进程调用一个函数获得限制值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种数据结构表示打开文件:

file

原子操作


任何要求多于两个函数调用的操作都不是原子操作,因为在两个函数调用之间,内核有可能临时挂起进程。

在打开文件时设置O_APPEND标志,这样做使得内核在每次写操作之前,都将进程的当前偏移量设置到该文件的尾端处。

相关函数:pread()、pwrite()

重定向


dup()、dup2()

同步I/O相关函数


sync()、fsync()、fdatasync()

修改已打开的文件属性


fcntl()

文件或目录信息获取


stat()、fstat()、lstat()、fstatat()

文件类型:

  1. 普通文件
  2. 目录文件
  3. 块特殊文件
  4. 字符特殊文件
  5. FIFO
  6. 套接字
  7. 符号链接

一个进程相关的ID


ID

保存的设置用户ID和保存的设置组ID在执行一个程序时包含了有效用户ID和有效组ID的副本。相关函数setuid()

文件访问权限的一些规则


  1. 用名字打开任一类型的文件时,对该名字中包含的每一个目录,包括它可能隐含的当前工作目录都应具有执行权限。
  2. 为了在一个目录中创建一个新文件,必须对该目录具有写权限和执行权限。
  3. 为了删除一个现有文件,必须对包含该文件的目录具有写权限和执行权限。对该文件本身不需要读、写权限。

访问权限的测试


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()