module File::Constants

模块 File::Constants 定义了与文件相关的常量。

这里有两个常量的系列:

可以在本地进程中使用的文件常量可以通过方法 File::Constants.constants 检索。

File::Constants.constants.take(5)
# => [:RDONLY, :WRONLY, :RDWR, :APPEND, :CREAT]

文件访问

文件访问常量可以在以下方法的调用中使用可选参数 mode

读/写访问

可以通过文件访问常量指定流的读写访问方式。

常量可以作为其他此类常量按位 OR 的一部分来指定。

此部分中的常量可以任意组合指定。

File::RDONLY

标志 File::RDONLY 指定流应仅用于读取。

filepath = '/tmp/t.tmp'
f = File.new(filepath, File::RDONLY)
f.write('Foo') # Raises IOError (not opened for writing).

File::WRONLY

标志 File::WRONLY 指定流应仅用于写入。

f = File.new(filepath, File::WRONLY)
f.read # Raises IOError (not opened for reading).

File::RDWR

标志 File::RDWR 指定流应同时用于读取和写入。

f = File.new(filepath, File::RDWR)
f.write('Foo') # => 3
f.rewind       # => 0
f.read         # => "Foo"

文件定位

File::APPEND

标志 File::APPEND 指定流应以追加模式打开。

在每次写入操作之前,位置会设置为流的末尾。位置的修改和随后的写入操作将作为单个原子步骤执行。

File::TRUNC

标志 File::TRUNC 指定流将在开头被截断。如果文件存在且成功打开进行写入,则将其截断到位置零;其 ctime 和 mtime 会被更新。

对 FIFO 特殊文件或终端设备没有影响。对其他文件类型的影响是实现定义的。将 File::TRUNC 与 File::RDONLY 一起使用的结果是未定义的。

创建和保留

File::CREAT

标志 File::CREAT 指定如果流不存在,则创建它。

如果文件存在

- Raise an exception if File::EXCL is also specified.
- Otherwise, do nothing.

如果文件不存在,则会创建它。成功完成后,文件的 atime、ctime 和 mtime 将被更新,父目录的 ctime 和 mtime 也将被更新。

File::EXCL

标志 File::EXCL 指定流不应已存在;如果同时指定了标志 File::CREAT 和 File::EXCL,并且流已存在,则会引发异常。

文件的存在性检查和创建作为原子操作执行。

如果同时指定了 File::EXCL 和 File::CREAT,并且路径指向符号链接,则无论符号链接的内容如何,都会引发异常。

如果指定了 File::EXCL 且未指定 File::CREAT,则结果未定义。

POSIX 文件常量

一些文件访问常量仅在符合 POSIX 的系统上定义;它们是:

File::SYNC、File::RSYNC 和 File::DSYNC

标志 File::SYNC、File::RSYNC 或 File::DSYNC 指定 I/O 操作与底层文件系统同步。

这些标志仅对符合 POSIX 的系统有效。

请注意,这些标志的行为可能会因使用的操作系统和文件系统而略有不同。此外,使用这些标志可能会由于 I/O 操作的同步性质而影响性能,因此应谨慎使用它们,尤其是在性能关键型应用程序中。

File::NOCTTY

标志 File::NOCTTY 指定如果流是终端设备,则该设备不会成为进程的控制终端。

仅为符合 POSIX 的系统定义。

File::DIRECT

标志 File::DIRECT 请求最小化流的输入/输出缓存效应。

仅为符合 POSIX 的系统定义。

File::NOATIME

标志 File::NOATIME 指定打开流的操作不应修改其访问时间 (atime)。

仅为符合 POSIX 的系统定义。

File::NOFOLLOW

标志 File::NOFOLLOW 指定如果路径是符号链接,则不应跟随它。

仅为符合 POSIX 的系统定义。

File::TMPFILE

标志 File::TMPFILE 指定打开的流应为新的临时文件。

仅为符合 POSIX 的系统定义。

其他文件访问常量

File::NONBLOCK

如果可能,文件以非阻塞模式打开。打开操作或之后在文件上的任何 I/O 操作都不会导致调用进程等待。

File::BINARY

标志 File::BINARY 指定流将以二进制模式访问。

File::SHARE_DELETE

标志 File::SHARE_DELETE 允许其他进程以删除访问方式打开流。

仅限 Windows。

如果流以(本地)删除访问方式打开且未指定 File::SHARE_DELETE,而另一个进程尝试以删除访问方式打开它,则该尝试将失败,并且流不会为该进程打开。

锁定

四个文件常量与流锁定有关;请参阅 File#flock

File::LOCK_EX

标志 File::LOCK_EX 指定排他锁;一次只有一个进程可以锁定流。

File::LOCK_NB

标志 File::LOCK_NB 指定流的非阻塞锁定;可以与 File::LOCK_EX 或 File::LOCK_SH 组合。

File::LOCK_SH

标志 File::LOCK_SH 指定多个进程可以同时锁定流。

File::LOCK_UN

标志 File::LOCK_UN 指定流不应被锁定。

文件名通配常量 (File::FNM_*)

文件名通配常量可以在以下方法的调用中使用可选参数 flags

常量是:

File::FNM_CASEFOLD

标志 File::FNM_CASEFOLD 使模式在 File.fnmatch 中不区分大小写(但对于 Dir.glob 不起作用)。

File::FNM_DOTMATCH

标志 File::FNM_DOTMATCH 使 '*' 模式匹配以 '.' 开头的文件名。

File::FNM_EXTGLOB

标志 File::FNM_EXTGLOB 启用模式 '{a,b}',它匹配模式 ‘a’ 和模式 ‘b’;行为类似于 正则表达式并集(例如,'(?:a|b)')。

pattern = '{LEGAL,BSDL}'
Dir.glob(pattern)      # => ["LEGAL", "BSDL"]
Pathname.glob(pattern) # => [#<Pathname:LEGAL>, #<Pathname:BSDL>]
pathname.glob(pattern) # => [#<Pathname:LEGAL>, #<Pathname:BSDL>]

File::FNM_NOESCAPE

标志 File::FNM_NOESCAPE 禁用 '\' 转义。

File::FNM_PATHNAME

标志 File::FNM_PATHNAME 指定模式 '*''?' 不匹配目录分隔符(常量 File::SEPARATOR 的值)。

File::FNM_SHORTNAME

标志 File::FNM_SHORTNAME 允许模式匹配短文件名(如果存在)。

仅限 Windows。

File::FNM_SYSCASE

标志 File::FNM_SYSCASE 指定大小写敏感性与底层操作系统相同;对于 File.fnmatch 有效,但对于 Dir.glob 无效。

其他常量

File::NULL

标志 File::NULL 包含空设备的字符串值。