研究postgresql数据库故障转移时,提到可以使用一个网络文件系统,但是要注意的是该文件系统应具有完全的POSIX行为,那么什么是文件系统的POSIX行为呢?
POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。
POSIX接口中对文件系统的要求如下:
1.文件名由除系统目录分隔符(unix是/,windows是\)和空字符“\0”外的任意ASCII字符组成,现代系统很多还可以包含UNICODE字符,但是还是推荐使用传统的ASCII码命名.
2.目录不能创建硬链接.
3.文件描述符是一个非负数.
4.文件描述符(fd)是一个非负数,每个进程的fd之间不存在联系,每个进程都有一个进程表项,每个进程调用打开文件系统调用时,进程表项就会增加一条,每条的id就是fd,fd只会按照“从0开始(每个进程从各自的0开始),返回最小的未用的fd”的这个规则返回fd(通常0到2会被系统标准输出输入占用),不同进程打开同一个文件,会有不同的fd返回.
5.一般shell程序会把0、1、2三个文件描述符标准化为shell程序的输入输出和错误输出,换句话说文件描述符0到2已经被这3个标准输入输出占用了.
POSIX也定义了三个常量代表了这三个数字包含在unistd.h头文件上
STDIN_FILENO | 0 |
STDOUT_FILENO | 1 |
STDERR_FILENO | 2 |
其实,windows,linux,unix操作系统都满足POSIX规范。