|
第十一章??文件系統(tǒng)
by
flamephoenix
?
一、文件輸入/輸出函數(shù)
? 1、基本I/O函數(shù)
??? 1)open函數(shù)
??? 2)用open重定向輸入
??? 3)文件重定向
??? 4)指定讀寫權(quán)限
??? 5)close函數(shù)
??? 6)print, printf和write函數(shù)
??? 7)select函數(shù)
??? 8)eof函數(shù)
??? 9)間接文件變量
? 2、跳過和重讀數(shù)據(jù)
? 3、系讀寫函數(shù)
? 4、用getc讀取字符
? 5、用binmode讀取二進制文件 二、目錄處理函數(shù)
? 1、mkdir
? 2、chdir
? 3、opendir
? 4、closedir
? 5、readdir
? 6、telldir
? 7、seekdir
? 8、rewinddir
? 9、rmdir 三、文件屬性函數(shù)
? 1、文件重定位函數(shù)
? 2、鏈接和符號鏈接函數(shù)
? 3、文件許可權(quán)函數(shù)
? 4、其他屬性函數(shù) 四、使用DBM文件
????本章所講的函數(shù)多數(shù)使用了UNIX操作系統(tǒng)的特性,在非UNIX系統(tǒng)中,一些函數(shù)可能沒有定義或有不同的工作方式,使用時請查看Perl聯(lián)機文檔。 一、文件輸入/輸出函數(shù) ????本節(jié)講述從文件中讀取信息和向文件寫入信息的內(nèi)置庫函數(shù)。 1、基本I/O函數(shù) ????一些I/O函數(shù)在前面的章節(jié)中已有講述,如
- open:允許程序訪問文件
- close:終止文件訪問
- print:文件寫入字符串
- write:向文件寫入格式化信息
- printf:格式化字符串并輸出到文件
????這里簡單回顧一下,再講一些前面未提到的函數(shù)。 1)open函數(shù) ????open函數(shù)將文件變量與某文件聯(lián)系起來,提供訪問文件的接口,例如:open(MYVAR,
"/u/file");
如果文件打開成功,則返回非零值,否則返回零。缺省地,open打開文件用以讀取其內(nèi)容,若想打開文件以寫入內(nèi)容,則在文件名前加個大于號:open(MYVAR,
">/u/file"); 向已有的文件末尾添加內(nèi)容用兩個大于號:open(MYVAR, ">>/u/file");
若想打開文件作為數(shù)據(jù)導向的命令,則在命令前加上管道符(|):open(MAIL, "|mail dave"); 2)用open重定向輸入 ????可以把打開的文件句柄用作向程序輸入數(shù)據(jù)的命令,方法是在命令后加管道符(|),如: ????open(CAT,
"cat file*|"); ????對open的調(diào)用運行命令cat file*
,此命令創(chuàng)建一個臨時文件,這個文件的內(nèi)容是所有以file打頭的文件的內(nèi)容連接而成,此文件看作輸入文件,可用文件變量CAT訪問,如: ????$input
= ; ????下面的例子使用命令w的輸出來列出當前登錄的所有用戶名。
1 : #!/usr/local/bin/perl 2 : 3 : open (WOUT, "w|"); 4 :
$time = <WOUT>; 5 : $time =~ s/^ *//; 6 : $time =~ s/
.*//; 7 : ; # skip headings line 8 : @users = ; 9 :
close (WOUT); 10: foreach $user (@users) { 11: ? $user =~ s/
.*//; 12: } 13: print ("Current time: $time"); 14: print
("Users logged on:\n"); 15: $prevuser = ""; 16: foreach $user
(sort @users) { 17: ? if ($user ne $prevuser) { 18: ?
? print ("\t$user"); 19: ? ? $prevuser = $user; 20:
? } 21: }
????結(jié)果輸出如下:
Current time: 4:25pm Users logged on: ? dave ?
kilroy ? root ? zarquon
????w命令列出當前時間、系統(tǒng)負載和登錄的用戶,以及每個用戶的作業(yè)時間和當前運行的命令,如:
4:25pm up 1 day, 6:37, 6 users, load average: 0.79, 0.36, 0.28
User tty login@ idle JCPU PCPU what
dave ttyp0 2:26pm 27 3 w
kilroy ttyp1 9:01am 2:27 1:04 11 -csh
kilroy ttyp2 9:02am 43 1:46 27 rn
root ttyp3 4:22pm 2 -csh
zarquon ttyp4 1:26pm 4 43 16 cc myprog.c
kilroy ttyp5 9:03am 2:14 48 /usr/games/hack
????上例中從w命令的輸出中取出所需的信息:當前時間和登錄的用戶名。第3行運行w命令,此處對open的調(diào)用指定w的輸出用作程序的輸入,用文件變量WOUT來訪問該輸入。第4行讀取第一行信息,即: ????4:25pm
up 1 day, 6:37, 6 users, load average: 0.79, 0.36,
0.28 ????接下來的兩行從這行中抽取出時間。首先,第5行刪除起始的空格,然后第6行刪去除時間和結(jié)尾換行符之間的所有字符,存入變量$time。 ????第7行從WOUT讀取第二行,這行中無有用信息,故不作處理。第8行把剩下的行賦給數(shù)組@users,然后第9行關(guān)閉WOUT,終止運行w命令的進程。 ????@users中的每個元素都是一行用戶信息,因為本程序只需要每行的第一個單詞,即用戶名,故10~12行去掉除換行符外的其它字符,這一循環(huán)結(jié)束后,@users中只剩下用戶名的列表。 ????第13行輸出存貯在$time中的時間,注意這時print不需要加上換行符,因為$time中有。16~21行對@users中的用戶名排序并輸出。因為同一個用戶可以多次登錄,所以用$preuser存貯輸出的最后一個用戶名,下次輸出數(shù)組元素$user時,如果其與$preser相等,則不輸出。 3)文件重定向 ????許多UNIX
shell可以把標準輸出文件(STDOUT)和標準錯誤文件(STDERR)都重定向到同一個文件,例如在Bourne
Shell(sh)中,命令 ????$ foo > file1
2>&1 ????運行命令foo并把輸出到標準輸出文件和標準錯誤文件的內(nèi)容存貯到文件file1中。下面是用Perl實現(xiàn)這一功能的例子:
1: #!/usr/local/bin/perl 2: 3: open (STDOUT, ">file1") ||
die ("open STDOUT failed"); 4: open (STDERR, ">&STDOUT") ||
die ("open STDERR failed"); 5: print STDOUT ("line 1\n"); 6: print
STDERR ("line 2\n"); 7: close (STDOUT); 8: close (STDERR);
????運行后,文件file1中的內(nèi)容為: ????
line 2 ???? line
1 ????可以看到,這兩行并未按我們想象的順序存貯,為什么呢?我們來分析一下這段程序。 ????第3行重定向標準輸出文件,方法是打開文件file1將它與文件變量STDOUT關(guān)聯(lián),這也關(guān)閉了標準輸出文件。第4行重定向標準錯誤文件,參數(shù)>&STDOUT告訴Perl解釋器使用已打開并與STDOUT關(guān)聯(lián)的文件,即文件變量STDERR指向與STDOUT相同的文件。第5、6行分別向STDOUT和STDERR寫入數(shù)據(jù),因為這兩個文件變量指向同一個文件,故兩行字符串均寫到文件file1中,但順序卻是錯誤的,怎么回事呢? ????問題在于UNIX對輸出的處理上。當使用print(或其它函數(shù))寫入STDOUT等文件時,UNIX操作系統(tǒng)真正所做的是把數(shù)據(jù)拷貝到一片特殊的內(nèi)存即緩沖區(qū)中,接下來的輸出操作繼續(xù)寫入緩沖區(qū)直到寫滿,當緩沖區(qū)滿了,就把全部數(shù)據(jù)實際輸出。象這樣先寫入緩沖區(qū)再把整個緩沖區(qū)的內(nèi)容輸出比每次都實際輸出所花費的時間要少得多,因為一般來說,I/O比內(nèi)存操作慢得多。 ????程序結(jié)束時,任何非空的緩沖區(qū)都被輸出,然而,系統(tǒng)為STDOUT和STDERR分別維護一片緩沖區(qū),并且先輸出STDERR的內(nèi)容,因此存貯在STDERR的緩沖區(qū)中的內(nèi)容line
2出現(xiàn)在存貯在STDOUT的緩沖區(qū)中的內(nèi)容line
1之前。 ????為了解決這個問題,可以告訴Perl解釋器不對文件使用緩沖,方法為: ????
1、用select函數(shù)選擇文件 ????
2、把值1賦給系統(tǒng)變量$| ????系統(tǒng)變量$|指定文件是否進行緩沖而不管其是否應(yīng)該使用緩沖。如果$|為非零值則不使用緩沖。$|與系統(tǒng)變量$~和$^協(xié)同工作,當未調(diào)用select函數(shù)時,$|影響當前缺省文件。下例保證了輸出的次序:
1 : #!/usr/local/bin/perl 2 : 3 : open (STDOUT, ">file1")
|| die ("open STDOUT failed"); 4 : open (STDERR, ">&STDOUT")
|| die ("open STDERR failed"); 5 : $| = 1; 6 : select
(STDERR); 7 : $| = 1; 8 : print STDOUT ("line 1\n"); 9 : print
STDERR ("line 2\n"); 10: close (STDOUT); 11: close (STDERR);
????程序運行后,文件file1中內(nèi)容為: ????
line 1 ???? line
2 ????第5行將$|賦成1,告訴Perl解釋器當前缺省文件不進行緩沖,因為未調(diào)用select,當前的缺省文件為重定向到文件file1的STDOUT。第6行將當前缺省文件設(shè)為STDERR,第7行又設(shè)置$|為1,關(guān)掉了重定向到file1的標準錯誤文件的緩沖。由于STDOUT和STDERR的緩沖均被關(guān)掉,向其的輸出立刻被寫到文件中,因此line
1出現(xiàn)在第一行。 4)指定讀寫權(quán)限 ????打開一個既可讀又可寫的文件方法是在文件名前加上"+>",如下: ????
open (READWRITE,
"+>file1"); ????此語句打開既可讀又可寫的文件file1,即可以重寫其中的內(nèi)容。文件讀寫操作最好與庫函數(shù)seek和tell一起使用,這樣可以跳到文件任何一點。 ????注:也可用前綴"+<"指定可讀寫權(quán)限。 5)close函數(shù) ????用于關(guān)閉打開的文件。當用close關(guān)閉管道,即重定向的命令時,程序等待重定向的命令結(jié)束,如: ????
open (MYPIPE, "cat file*|"); ???? close
(MYPIPE); ????當關(guān)閉此文件變量時,程序暫停運行,直到命令cat
file*運行完畢。 6)print,
printf和write函數(shù) ????print是這三個函數(shù)中最簡單的,它向指定的文件輸出,如果未指定,則輸出到當前缺省文件中,如: ????
print ("Hello, there!\n"); ???? print OUTFILE
("Hello,
there!\n"); ????第一句輸出到當前缺省文件中,若未調(diào)用select,則為STDOUT。第二句輸出到由文件變量OUTFILE指定的文件中。 ????printf函數(shù)先格式化字符串再輸出到指定文件或當前缺省文件中,如: ????
printf OUTFILE (“You owe me %8.2f",
$owing); ????此語句取出變量$owing的值并替換掉串中的%8.2f,%8.2f是域格式的例子,把$owing的值看作浮點數(shù)。 ????write函數(shù)使用輸出格式把信息輸出到文件中,如: ????
select (OUTFILE); ???? $~ =
"MYFORMAT"; ????
write; ????關(guān)于printf和write,詳見《第x章 格式化輸出》。 7)select函數(shù) ????select函數(shù)將通過參數(shù)傳遞的文件變量指定為新的當前缺省文件,如: ????
select
(MYFILE); ????這樣,MYFILE就成了當前缺省文件,當對print、write和printf的調(diào)用未指定文件時,就輸出到MYFILE中。 8)eof函數(shù) ????eof函數(shù)查看最后一次讀文件操作是否為文件最后一個記錄,如果是,則返回非零值,如果文件還有內(nèi)容,返回零。 ????一般情況下,對eof的調(diào)用不加括號,因為eof和eof()是等效的,但與<>操作符一起使用時,eof和eof()就不同了?,F(xiàn)在我們來創(chuàng)建兩個文件,分別叫做file1和file2。file1的內(nèi)容為: ????
This is a line from the first file. ???? Here is
the last line of the first
file. ????file2的內(nèi)容為: ????
This is a line from the second and last file. ????
Here is the last line of the last
file. ????下面就來看一下eof和eof()的區(qū)別,第一個程序為:
1: #!/usr/local/bin/perl 2: 3: while ($line = <>)
{ 4: ? print ($line); 5: ? if (eof) { 6: ?
? print ("-- end of current file --\n"); 7: ? } 8: }
????運行結(jié)果如下:
$ program file1 file2 This is a line from the first file. Here
is the last line of the first file. -- end of current file -- This
is a line from the second and last file. Here is the last line of the
last file. -- end of current file -- $
????下面把eof改為eof(),第二個程序為:
1: #!/usr/local/bin/perl 2: 3: while ($line = <>)
{ 4: ? print ($line); 5: ? if (eof()) { 6: ?
? print ("-- end of output --\n"); 7: ? } 8: }
????運行結(jié)果如下:
$ program file1 file2 This is a line from the first file. Here
is the last line of the first file. This is a line from the second
and last file. Here is the last line of the last file. -- end of
output --$
????這時,只有所有文件都讀過了,eof()才返回真,如果只是多個文件中前幾個的末尾,返回值為假,因為還有要讀取的輸入。 9)間接文件變量 ????對于上述各函數(shù)open, close,
print, printf, write,
select和eof,都可以用簡單變量來代替文件變量,這時,簡單變量中所存貯的字符串就被看作文件變量名,下面就是這樣一個例子,此例很簡單,就不解釋了。需要指出的是,函數(shù)open,
close, write, select和eof還允許用表達式來替代文件變量,表達式的值必須是字符串,被用作文件變量名。
1: #!/usr/local/bin/perl 2: 3: &open_file("INFILE", "",
"file1"); 4: &open_file("OUTFILE", ">", "file2"); 5: while
($line = &read_from_file("INFILE")) { 6: ?
&print_to_file("OUTFILE", $line); 7: } 8: 9: sub open_file
{ 10: ? local ($filevar, $filemode, $filename) = @_; 11:
12: ? open ($filevar, $filemode . $filename) || 13: ?
? die ("Can't open $filename"); 14: } 15: sub read_from_file
{ 16: ? local ($filevar) = @_; 17: 18: ?
<$filevar>; 19: } 20: sub print_to_file { 21: ?
local ($filevar, $line) = @_; 22: 23: ? print $filevar
($line); 24: }
2、跳過和重讀數(shù)據(jù)
函數(shù)名 |
seek |
調(diào)用語法 |
seek (filevar, distance, relative_to); |
解說 |
在文件中向前/后移動,有三個參數(shù): 1、filevar,文件變量 2、distance,移動的字節(jié)數(shù),正數(shù)向前移動,負數(shù)往回移動 3、reletive_to,值可為0、1或2。為0時,從文件頭開始移動,為1時,相對于當前位置(將要讀的下一行)移動,為2時,相對于文件末尾移動。 運行成功返回真(非零值),失敗則返回零,常與tell函數(shù)合用。 |
函數(shù)名 |
tell |
調(diào)用語法 |
tell (filevar); |
解說 |
返回從文件頭到當前位置的距離。 注意: 1、seek和tell不能用于指向管道的文件變量。 2、seek和tell中文件變量參數(shù)可使用表達式。 |
3、系統(tǒng)讀寫函數(shù)
函數(shù)名 |
read |
調(diào)用語法 |
read (filevar, result, length, skipval); |
解說 |
read函數(shù)設(shè)計得與UNIX的fread函數(shù)等效,可以讀取任意長度的字符(字節(jié))存入一個簡單變量。其參數(shù)有四個: 1、filevar:文件變量 2、result:存貯結(jié)果的簡單變量(或數(shù)組元素) 3、length:讀取的字節(jié)數(shù) 4、skipval:可選項,指定讀文件之前跳過的字節(jié)數(shù)。 返回值為實際讀取的字節(jié)數(shù),如果已到了文件末尾,則返回零,如果出錯,則返回空串。 |
函數(shù)名 |
sysread |
調(diào)用語法 |
sysread (filevar, result, length, skipval); |
解說 |
更快的讀取數(shù)據(jù),與UNIX函數(shù)read等效,參數(shù)與read相同。 |
函數(shù)名 |
syswrite |
調(diào)用語法 |
syswrite (filevar, data, length, skipval); |
解說 |
更快的寫入數(shù)據(jù),與UNIX函數(shù)write等效,參數(shù): 1、filevar:將要寫入的文件 2、data:存貯要寫入數(shù)據(jù)的變量 3、length:要寫入的字節(jié)數(shù) 4、skipval寫操作之前跳過的字節(jié)數(shù)。 |
4、用getc讀取字符
函數(shù)名 |
getc |
調(diào)用語法 |
$char = getc (infile); |
解說 |
從文件中讀取單個字符。 |
5、用binmode讀取二進制文件
函數(shù)名 |
binmode |
調(diào)用語法 |
binmode (filevar); |
解說 |
當你的系統(tǒng)(如類DOS系統(tǒng))對文本文件和二進制文件有所區(qū)別時使用。必須在打開文件后、讀取文件前使用。 |
二、目錄處理函數(shù)
函數(shù)名 |
mkdir |
調(diào)用語法 |
mkdir (dirname, permissions); |
解說 |
創(chuàng)建新目錄,參數(shù)為: 1、dirname:將要創(chuàng)建的目錄名,可以為字符串或表達式 2、permissions:8進制數(shù),指定目錄的訪問權(quán)限,其值和意義見下表,權(quán)限的組合方法為將相應(yīng)的值相加。 |
值 |
權(quán)限 |
4000 ? |
運行時設(shè)置用戶ID ? |
2000 |
運行時設(shè)置組ID |
1000 |
粘貼位 |
0400 |
擁有者讀權(quán)限 |
0200 |
擁有者寫權(quán)限 |
0100 |
擁有者執(zhí)行權(quán)限 |
0040 |
組讀權(quán)限 |
0020 |
組寫權(quán)限 |
0010 |
組執(zhí)行權(quán)限 |
0004 |
所有人讀權(quán)限 |
0002 |
所有人寫權(quán)限 |
0001 |
所有人執(zhí)行權(quán)限 |
函數(shù)名 |
chdir |
調(diào)用語法 |
chdir (dirname); |
解說 |
改變當前工作目錄。參數(shù)dirname可以為字符串,也可以為表達式。 |
函數(shù)名 |
opendir |
調(diào)用語法 |
opendir (dirvar, dirname); |
解說 |
打開目錄,與下面幾個函數(shù)合用,可查看某目錄中文件列表。參數(shù)為: 1、dirvar:目錄變量,與文件變量類似 2、dirname:目錄名,可為字符串或表達式 成功返回真值,失敗返回假。 注:程序中可用同名的目錄變量和文件變量,根據(jù)環(huán)境確定取成分。 |
函數(shù)名 |
closedir |
調(diào)用語法 |
closedir (mydir); |
解說 |
關(guān)閉打開的目錄。 |
函數(shù)名 |
readdir |
調(diào)用語法 |
readdir (mydir); |
解說 |
賦給簡單變量時,每次賦予一個文件或子目錄名,對數(shù)組則賦予全部文件和子目錄名。 |
函數(shù)名 |
telldir |
調(diào)用語法 |
location = telldir (mydir); |
解說 |
象在文件中前后移動一樣,telldir和下面的seekdir用于在目錄列表中前后移動。 |
函數(shù)名 |
seekdir |
調(diào)用語法 |
seekdir(mydir, location); |
解說 |
location必須為telldir返回的值。 |
函數(shù)名 |
rewinddir |
調(diào)用語法 |
rewinddir (mydir); |
解說 |
將讀取目錄的位置重置回開頭,從而可以重讀目錄列表。 |
函數(shù)名 |
rmdir |
調(diào)用語法 |
rmdir (dirname); |
解說 |
刪除空目錄。成功則返回真(非零值),失敗返回假(零值)。 |
三、文件屬性函數(shù) 1、文件重定位函數(shù)
函數(shù)名 |
rename |
調(diào)用語法 |
rename (oldname, newname); |
解說 |
改變文件名或移動到另一個目錄中,參數(shù)可為字符串或表達式。 |
函數(shù)名 |
unlink |
調(diào)用語法 |
num = unlink (filelist); |
解說 |
刪除文件。參數(shù)為文件名列表,返回值為實際刪除的文件數(shù)目。 此函數(shù)之所以叫unlink而不叫delete是因為它實際所做的是刪除文件的鏈接。 |
2、鏈接和符號鏈接函數(shù)
函數(shù)名 |
link |
調(diào)用語法 |
link (newlink, file); |
解說 |
創(chuàng)建現(xiàn)有文件的鏈接--硬鏈接,file是被鏈接的文件,newlink是被創(chuàng)建的鏈接。 成功返回真,失敗返回假。 當刪除這兩個鏈接中的一個時,還可以用另一個來訪問該文件。 |
函數(shù)名 |
symlink |
調(diào)用語法 |
symlink (newlink, file); |
解說 |
創(chuàng)建現(xiàn)有文件的符號鏈接,即指向文件名,而不是指向文件本身。參數(shù)和返回值同上。 當原文件被刪除(如:被unlinke函數(shù)刪除),則被創(chuàng)建鏈接不可用,除非再創(chuàng)建一個與原被鏈接的文件同名的文件。 |
函數(shù)名 |
readlink |
調(diào)用語法 |
filename = readlink (linkname); |
解說 |
如果linkname為符號鏈接文件,返回其實際指向的文件。否則返回空串。 |
3、文件許可權(quán)函數(shù)
函數(shù)名 |
chmod |
調(diào)用語法 |
chmod (permissions, filelist); |
解說 |
改變文件的訪問權(quán)限。參數(shù)為: 1、permissions為將要設(shè)置的權(quán)限,其含義見上述mkdir中權(quán)限表 2、filelist為欲改變權(quán)限的文件列表 |
函數(shù)名 |
chown |
調(diào)用語法 |
chown (userid, groupid, filelist); |
解說 |
改變文件的屬主,有三個參數(shù): 1、userid:新屬主的(數(shù)字)ID號 2、groupid:新的組(數(shù)字)ID號,-1為保留原組 3、filelist:欲改變屬主的文件列表 |
函數(shù)名 |
umask |
調(diào)用語法 |
oldmaskval = umask (maskval); |
解說 |
設(shè)置文件訪問權(quán)限掩碼,返回值為當前掩碼。 |
4、其它屬性函數(shù)
函數(shù)名 |
truncate |
調(diào)用語法 |
truncate (filename, length); |
解說 |
將文件的長度減少到length字節(jié)。如果文件長度已經(jīng)小于length,則不做任何事。其中filename可以為文件名,也可以為文件變量 |
函數(shù)名 |
stat |
調(diào)用語法 |
stat (file); |
解說 |
獲取文件狀態(tài)。參數(shù)file可為文件名也可為文件變量。返回列表元素依次為:
- 文件所在設(shè)備
- 內(nèi)部參考號(inode)
- 訪問權(quán)限
- 硬鏈接數(shù)
- 屬主的(數(shù)字)ID
- 所屬組的(數(shù)字)ID
- 設(shè)備類型(如果file是設(shè)備的話)
- 文件大小(字節(jié)數(shù))
- 最后訪問時間
- 最后修改時間最后改變狀態(tài)時間
- I/O操作最佳塊大小
- 分配給該文件的塊數(shù)
|
函數(shù)名 |
lstat |
調(diào)用語法 |
lstat (file); |
解說 |
與stat類似,區(qū)別是將file看作是符號鏈接。 |
函數(shù)名 |
time |
調(diào)用語法 |
currtime = time(); |
解說 |
返回從1970年1月1日起累計秒數(shù)。 |
函數(shù)名 |
gmtime |
調(diào)用語法 |
timelist = gmtime (timeval); |
解說 |
將由time, stat 或 -A 和 -M 文件測試操作符返回的時間轉(zhuǎn)換成格林威治時間。返回列表元素依次為:
- 秒
- 分鐘
- 小時,0~23
- 日期
- 月份,0~11(一月~十二月)
- 年份
- 星期,0~6(周日~周六)
- 一年中的日期,0~364
- 是否夏令時的標志
詳見UNIX的gmtime幫助。
|
函數(shù)名 |
localtime |
調(diào)用語法 |
timelist = localtime (timeval); |
解說 |
與gmtime類似,區(qū)別為將時間值轉(zhuǎn)換為本地時間。 |
函數(shù)名 |
utime |
調(diào)用語法 |
utime (acctime, modtime, filelist); |
解說 |
改變文件的最后訪問時間和最后更改時間。例如: $acctime = -A "file1"; $modtime =
-M "file1"; @filelist = ("file2", "file3"); utime ($acctime,
$modtime, @filelist); |
函數(shù)名 |
fileno |
調(diào)用語法 |
filedesc = fileno (filevar); |
解說 |
返回文件的內(nèi)部UNIX文件描述。參數(shù)filevar為文件變量。 |
函數(shù)名 |
fcntl flock |
調(diào)用語法 |
fcntl (filevar, fcntlrtn, value); flock (filevar,
flockop); |
解說 |
詳見同名UNIX函數(shù)幫助。 |
四、使用DBM文件 ???Perl中可用關(guān)聯(lián)數(shù)組來訪問DBM文件,所用函數(shù)為dbmopen和dbmclose,在Perl5中,已用tie和untie代替。
函數(shù)名 |
dbmopen |
調(diào)用語法 |
dbmopen (array, dbmfilename, permissions); |
解說 |
將關(guān)聯(lián)數(shù)組與DBM文件相關(guān)聯(lián)。參數(shù)為: 1、array:所用關(guān)聯(lián)數(shù)組 2、dbmfilename:將打開的DBM文件名 3、訪問權(quán)限,詳見mkdir |
函數(shù)名 |
dbmclose |
調(diào)用語法 |
dbmclose (array); |
解說 |
關(guān)閉DBM文件,拆除關(guān)聯(lián)數(shù)組與之的關(guān)系。 |
|
|