Perl 文件的打开和关闭
Perl中有以下两个具有多种形式的函数,可用于打开任何新的或现有的文件。
open FILEHANDLE, EXPR open FILEHANDLE sysopen FILEHANDLE, FILENAME, MODE, PERMS sysopen FILEHANDLE, FILENAME, MODE
这里FILEHANDLE是**open**函数返回的文件句柄,EXPR是包含文件名和打开文件模式的表达式。
Open 函数
以下是以只读模式打开**file.txt**的语法。小于号<表示文件必须以只读模式打开。
open(DATA, "<file.txt");
这里DATA是文件句柄,将用于读取文件。以下示例将打开一个文件并将它的内容打印到屏幕上。
#!/usr/bin/perl open(DATA, "<file.txt") or die "Couldn't open file file.txt, $!"; while(<DATA>) { print "$_"; }
以下是以写入模式打开file.txt的语法。大于号>表示文件必须以写入模式打开。
open(DATA, ">file.txt") or die "Couldn't open file file.txt, $!";
此示例在打开文件进行写入之前实际上会截断(清空)文件,这可能并非所需效果。如果要打开文件进行读写,可以在>或<字符前加一个加号。
例如,要打开文件进行更新而不截断它:
open(DATA, "+<file.txt"); or die "Couldn't open file file.txt, $!";
要先截断文件:
open DATA, "+>file.txt" or die "Couldn't open file file.txt, $!";
可以以追加模式打开文件。在此模式下,写入点将设置为文件的末尾。
open(DATA,">>file.txt") || die "Couldn't open file file.txt, $!";
双>>以追加模式打开文件,将文件指针放在末尾,以便可以立即开始追加信息。但是,除非在它前面也放置一个加号,否则无法从中读取:
open(DATA,"+>>file.txt") || die "Couldn't open file file.txt, $!";
下表列出了不同模式的可能值
序号 | 实体及定义 |
---|---|
1 | < 或 r 只读访问 |
2 | > 或 w 创建、写入和截断 |
3 | >> 或 a 写入、追加和创建 |
4 | +< 或 r+ 读写 |
5 | +> 或 w+ 只读访问 |
6 | +>> 或 a+ 只读访问 |
Sysopen 函数
Perl 中的**sysopen**函数类似于主要的open函数,不同之处在于它使用系统**open()**函数,并使用提供的参数作为系统函数的参数:
例如,要打开文件进行更新,模拟open中的**+<filename**格式:
sysopen(DATA, "file.txt", O_RDWR);
或者在更新前截断文件:
sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );
可以使用O_CREAT创建新文件,使用O_WRONLY以只写模式打开文件,使用O_RDONLY以只读模式打开文件。
如果必须创建**PERMS**参数指定指定文件的权限。默认情况下,它取**0x666**。
下表列出了MODE的可能值。
序号 | 实体及定义 |
---|---|
1 | O_RDWR 读写 |
2 | O_RDONLY 只读 |
3 | O_WRONLY 只写 |
4 | O_CREAT 创建文件 |
5 | O_APPEND 追加到文件 |
6 | O_TRUNC 截断文件 |
7 | O_EXCL 如果文件已存在则停止 |
8 | O_NONBLOCK 非阻塞可用性 |
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
Close 函数
要关闭文件句柄,从而取消文件句柄与相应文件的关联,可以使用**close**函数。这将刷新文件句柄的缓冲区并关闭系统的文件描述符。
close FILEHANDLE close
如果没有指定FILEHANDLE,则它将关闭当前选定的文件句柄。只有在成功刷新缓冲区并关闭文件时,它才返回true。
close(DATA) || die "Couldn't close file properly";