亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

watak

第十一章??文件系統(tǒng)

by flamephoenix

?

一、文件輸入/輸出函數(shù)
? 1、基本I/O函數(shù)
??? 1)open函數(shù)
??? 2)用open重定向輸入
??? 3)文件重定向
??? 4)指定讀寫(xiě)權(quán)限
??? 5)close函數(shù)
??? 6)print, printf和write函數(shù)
??? 7)select函數(shù)
??? 8)eof函數(shù)
??? 9)間接文件變量
? 2、跳過(guò)和重讀數(shù)據(jù)
? 3、系讀寫(xiě)函數(shù)
? 4、用getc讀取字符
? 5、用binmode讀取二進(jìn)制文件
二、目錄處理函數(shù)
? 1、mkdir
? 2、chdir
? 3、opendir
? 4、closedir
? 5、readdir
? 6、telldir
? 7、seekdir
? 8、rewinddir
? 9、rmdir
三、文件屬性函數(shù)
? 1、文件重定位函數(shù)
? 2、鏈接和符號(hào)鏈接函數(shù)
? 3、文件許可權(quán)函數(shù)
? 4、其他屬性函數(shù)
四、使用DBM文件

????本章所講的函數(shù)多數(shù)使用了UNIX操作系統(tǒng)的特性,在非UNIX系統(tǒng)中,一些函數(shù)可能沒(méi)有定義或有不同的工作方式,使用時(shí)請(qǐng)查看Perl聯(lián)機(jī)文檔。
一、文件輸入/輸出函數(shù)
????本節(jié)講述從文件中讀取信息和向文件寫(xiě)入信息的內(nèi)置庫(kù)函數(shù)。
1、基本I/O函數(shù)
????一些I/O函數(shù)在前面的章節(jié)中已有講述,如

  • open:允許程序訪問(wèn)文件
  • close:終止文件訪問(wèn)
  • print:文件寫(xiě)入字符串
  • write:向文件寫(xiě)入格式化信息
  • printf:格式化字符串并輸出到文件

????這里簡(jiǎn)單回顧一下,再講一些前面未提到的函數(shù)。
1)open函數(shù)
????open函數(shù)將文件變量與某文件聯(lián)系起來(lái),提供訪問(wèn)文件的接口,例如:open(MYVAR, "/u/file"); 如果文件打開(kāi)成功,則返回非零值,否則返回零。缺省地,open打開(kāi)文件用以讀取其內(nèi)容,若想打開(kāi)文件以寫(xiě)入內(nèi)容,則在文件名前加個(gè)大于號(hào):open(MYVAR, ">/u/file"); 向已有的文件末尾添加內(nèi)容用兩個(gè)大于號(hào):open(MYVAR, ">>/u/file"); 若想打開(kāi)文件作為數(shù)據(jù)導(dǎo)向的命令,則在命令前加上管道符(|):open(MAIL, "|mail dave");
2)用open重定向輸入
????可以把打開(kāi)的文件句柄用作向程序輸入數(shù)據(jù)的命令,方法是在命令后加管道符(|),如:
????open(CAT, "cat file*|");
????對(duì)open的調(diào)用運(yùn)行命令cat file* ,此命令創(chuàng)建一個(gè)臨時(shí)文件,這個(gè)文件的內(nèi)容是所有以file打頭的文件的內(nèi)容連接而成,此文件看作輸入文件,可用文件變量CAT訪問(wèn),如:
????$input = ;
????下面的例子使用命令w的輸出來(lái)列出當(dāng)前登錄的所有用戶(hù)名。

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命令列出當(dāng)前時(shí)間、系統(tǒng)負(fù)載和登錄的用戶(hù),以及每個(gè)用戶(hù)的作業(yè)時(shí)間和當(dāng)前運(yùn)行的命令,如:

  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命令的輸出中取出所需的信息:當(dāng)前時(shí)間和登錄的用戶(hù)名。第3行運(yùn)行w命令,此處對(duì)open的調(diào)用指定w的輸出用作程序的輸入,用文件變量WOUT來(lái)訪問(wèn)該輸入。第4行讀取第一行信息,即:
????4:25pm up 1 day, 6:37, 6 users, load average: 0.79, 0.36, 0.28
????接下來(lái)的兩行從這行中抽取出時(shí)間。首先,第5行刪除起始的空格,然后第6行刪去除時(shí)間和結(jié)尾換行符之間的所有字符,存入變量$time。
????第7行從WOUT讀取第二行,這行中無(wú)有用信息,故不作處理。第8行把剩下的行賦給數(shù)組@users,然后第9行關(guān)閉WOUT,終止運(yùn)行w命令的進(jìn)程。
????@users中的每個(gè)元素都是一行用戶(hù)信息,因?yàn)楸境绦蛑恍枰啃械牡谝粋€(gè)單詞,即用戶(hù)名,故10~12行去掉除換行符外的其它字符,這一循環(huán)結(jié)束后,@users中只剩下用戶(hù)名的列表。
????第13行輸出存貯在$time中的時(shí)間,注意這時(shí)print不需要加上換行符,因?yàn)?time中有。16~21行對(duì)@users中的用戶(hù)名排序并輸出。因?yàn)橥粋€(gè)用戶(hù)可以多次登錄,所以用$preuser存貯輸出的最后一個(gè)用戶(hù)名,下次輸出數(shù)組元素$user時(shí),如果其與$preser相等,則不輸出。
3)文件重定向
????許多UNIX shell可以把標(biāo)準(zhǔn)輸出文件(STDOUT)和標(biāo)準(zhǔn)錯(cuò)誤文件(STDERR)都重定向到同一個(gè)文件,例如在Bourne Shell(sh)中,命令
????$ foo > file1 2>&1
????運(yùn)行命令foo并把輸出到標(biāo)準(zhǔn)輸出文件和標(biāo)準(zhǔn)錯(cuò)誤文件的內(nèi)容存貯到文件file1中。下面是用Perl實(shí)現(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);

????運(yùn)行后,文件file1中的內(nèi)容為:
???? line 2
???? line 1
????可以看到,這兩行并未按我們想象的順序存貯,為什么呢?我們來(lái)分析一下這段程序。
????第3行重定向標(biāo)準(zhǔn)輸出文件,方法是打開(kāi)文件file1將它與文件變量STDOUT關(guān)聯(lián),這也關(guān)閉了標(biāo)準(zhǔn)輸出文件。第4行重定向標(biāo)準(zhǔn)錯(cuò)誤文件,參數(shù)>&STDOUT告訴Perl解釋器使用已打開(kāi)并與STDOUT關(guān)聯(lián)的文件,即文件變量STDERR指向與STDOUT相同的文件。第5、6行分別向STDOUT和STDERR寫(xiě)入數(shù)據(jù),因?yàn)檫@兩個(gè)文件變量指向同一個(gè)文件,故兩行字符串均寫(xiě)到文件file1中,但順序卻是錯(cuò)誤的,怎么回事呢?
????問(wèn)題在于UNIX對(duì)輸出的處理上。當(dāng)使用print(或其它函數(shù))寫(xiě)入STDOUT等文件時(shí),UNIX操作系統(tǒng)真正所做的是把數(shù)據(jù)拷貝到一片特殊的內(nèi)存即緩沖區(qū)中,接下來(lái)的輸出操作繼續(xù)寫(xiě)入緩沖區(qū)直到寫(xiě)滿,當(dāng)緩沖區(qū)滿了,就把全部數(shù)據(jù)實(shí)際輸出。象這樣先寫(xiě)入緩沖區(qū)再把整個(gè)緩沖區(qū)的內(nèi)容輸出比每次都實(shí)際輸出所花費(fèi)的時(shí)間要少得多,因?yàn)橐话銇?lái)說(shuō),I/O比內(nèi)存操作慢得多。
????程序結(jié)束時(shí),任何非空的緩沖區(qū)都被輸出,然而,系統(tǒng)為STDOUT和STDERR分別維護(hù)一片緩沖區(qū),并且先輸出STDERR的內(nèi)容,因此存貯在STDERR的緩沖區(qū)中的內(nèi)容line 2出現(xiàn)在存貯在STDOUT的緩沖區(qū)中的內(nèi)容line 1之前。
????為了解決這個(gè)問(wèn)題,可以告訴Perl解釋器不對(duì)文件使用緩沖,方法為:
???? 1、用select函數(shù)選擇文件
???? 2、把值1賦給系統(tǒng)變量$|
????系統(tǒng)變量$|指定文件是否進(jìn)行緩沖而不管其是否應(yīng)該使用緩沖。如果$|為非零值則不使用緩沖。$|與系統(tǒng)變量$~和$^協(xié)同工作,當(dāng)未調(diào)用select函數(shù)時(shí),$|影響當(dāng)前缺省文件。下例保證了輸出的次序:

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

????程序運(yùn)行后,文件file1中內(nèi)容為:
???? line 1
???? line 2
????第5行將$|賦成1,告訴Perl解釋器當(dāng)前缺省文件不進(jìn)行緩沖,因?yàn)槲凑{(diào)用select,當(dāng)前的缺省文件為重定向到文件file1的STDOUT。第6行將當(dāng)前缺省文件設(shè)為STDERR,第7行又設(shè)置$|為1,關(guān)掉了重定向到file1的標(biāo)準(zhǔn)錯(cuò)誤文件的緩沖。由于STDOUT和STDERR的緩沖均被關(guān)掉,向其的輸出立刻被寫(xiě)到文件中,因此line 1出現(xiàn)在第一行。
4)指定讀寫(xiě)權(quán)限
????打開(kāi)一個(gè)既可讀又可寫(xiě)的文件方法是在文件名前加上"+>",如下:
???? open (READWRITE, "+>file1");
????此語(yǔ)句打開(kāi)既可讀又可寫(xiě)的文件file1,即可以重寫(xiě)其中的內(nèi)容。文件讀寫(xiě)操作最好與庫(kù)函數(shù)seek和tell一起使用,這樣可以跳到文件任何一點(diǎn)。
????注:也可用前綴"+<"指定可讀寫(xiě)權(quán)限。
5)close函數(shù)
????用于關(guān)閉打開(kāi)的文件。當(dāng)用close關(guān)閉管道,即重定向的命令時(shí),程序等待重定向的命令結(jié)束,如:
???? open (MYPIPE, "cat file*|");
???? close (MYPIPE);
????當(dāng)關(guān)閉此文件變量時(shí),程序暫停運(yùn)行,直到命令cat file*運(yùn)行完畢。
6)print, printf和write函數(shù)
????print是這三個(gè)函數(shù)中最簡(jiǎn)單的,它向指定的文件輸出,如果未指定,則輸出到當(dāng)前缺省文件中,如:
???? print ("Hello, there!\n");
???? print OUTFILE ("Hello, there!\n");
????第一句輸出到當(dāng)前缺省文件中,若未調(diào)用select,則為STDOUT。第二句輸出到由文件變量OUTFILE指定的文件中。
????printf函數(shù)先格式化字符串再輸出到指定文件或當(dāng)前缺省文件中,如:
???? printf OUTFILE (“You owe me %8.2f", $owing);
????此語(yǔ)句取出變量$owing的值并替換掉串中的%8.2f,%8.2f是域格式的例子,把$owing的值看作浮點(diǎn)數(shù)。
????write函數(shù)使用輸出格式把信息輸出到文件中,如:
???? select (OUTFILE);
???? $~ = "MYFORMAT";
???? write;
????關(guān)于printf和write,詳見(jiàn)《第x章 格式化輸出》。
7)select函數(shù)
????select函數(shù)將通過(guò)參數(shù)傳遞的文件變量指定為新的當(dāng)前缺省文件,如:
???? select (MYFILE);
????這樣,MYFILE就成了當(dāng)前缺省文件,當(dāng)對(duì)print、write和printf的調(diào)用未指定文件時(shí),就輸出到MYFILE中。
8)eof函數(shù)
????eof函數(shù)查看最后一次讀文件操作是否為文件最后一個(gè)記錄,如果是,則返回非零值,如果文件還有內(nèi)容,返回零。
????一般情況下,對(duì)eof的調(diào)用不加括號(hào),因?yàn)閑of和eof()是等效的,但與<>操作符一起使用時(shí),eof和eof()就不同了。現(xiàn)在我們來(lái)創(chuàng)建兩個(gè)文件,分別叫做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.
????下面就來(lái)看一下eof和eof()的區(qū)別,第一個(gè)程序?yàn)椋?br>

1: #!/usr/local/bin/perl
2:
3: while ($line = <>) {
4: ? print ($line);
5: ? if (eof) {
6: ? ? print ("-- end of current file --\n");
7: ? }
8: }

????運(yùn)行結(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(),第二個(gè)程序?yàn)椋?br>

1: #!/usr/local/bin/perl
2:
3: while ($line = <>) {
4: ? print ($line);
5: ? if (eof()) {
6: ? ? print ("-- end of output --\n");
7: ? }
8: }

????運(yùn)行結(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 --$

????這時(shí),只有所有文件都讀過(guò)了,eof()才返回真,如果只是多個(gè)文件中前幾個(gè)的末尾,返回值為假,因?yàn)檫€有要讀取的輸入。
9)間接文件變量
????對(duì)于上述各函數(shù)open, close, print, printf, write, select和eof,都可以用簡(jiǎn)單變量來(lái)代替文件變量,這時(shí),簡(jiǎn)單變量中所存貯的字符串就被看作文件變量名,下面就是這樣一個(gè)例子,此例很簡(jiǎn)單,就不解釋了。需要指出的是,函數(shù)open, close, write, select和eof還允許用表達(dá)式來(lái)替代文件變量,表達(dá)式的值必須是字符串,被用作文件變量名。

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、跳過(guò)和重讀數(shù)據(jù)

 

函數(shù)名 seek
調(diào)用語(yǔ)法 seek (filevar, distance, relative_to);
解說(shuō) 在文件中向前/后移動(dòng),有三個(gè)參數(shù):
1、filevar,文件變量
2、distance,移動(dòng)的字節(jié)數(shù),正數(shù)向前移動(dòng),負(fù)數(shù)往回移動(dòng)
3、reletive_to,值可為0、1或2。為0時(shí),從文件頭開(kāi)始移動(dòng),為1時(shí),相對(duì)于當(dāng)前位置(將要讀的下一行)移動(dòng),為2時(shí),相對(duì)于文件末尾移動(dòng)。
運(yùn)行成功返回真(非零值),失敗則返回零,常與tell函數(shù)合用。

 

函數(shù)名 tell
調(diào)用語(yǔ)法 tell (filevar);
解說(shuō) 返回從文件頭到當(dāng)前位置的距離。
注意:
1、seek和tell不能用于指向管道的文件變量。
2、seek和tell中文件變量參數(shù)可使用表達(dá)式。

 

3、系統(tǒng)讀寫(xiě)函數(shù)

 

函數(shù)名 read
調(diào)用語(yǔ)法 read (filevar, result, length, skipval);
解說(shuō) read函數(shù)設(shè)計(jì)得與UNIX的fread函數(shù)等效,可以讀取任意長(zhǎng)度的字符(字節(jié))存入一個(gè)簡(jiǎn)單變量。其參數(shù)有四個(gè):
1、filevar:文件變量
2、result:存貯結(jié)果的簡(jiǎn)單變量(或數(shù)組元素)
3、length:讀取的字節(jié)數(shù)
4、skipval:可選項(xiàng),指定讀文件之前跳過(guò)的字節(jié)數(shù)。
返回值為實(shí)際讀取的字節(jié)數(shù),如果已到了文件末尾,則返回零,如果出錯(cuò),則返回空串。

 

函數(shù)名 sysread
調(diào)用語(yǔ)法 sysread (filevar, result, length, skipval);
解說(shuō) 更快的讀取數(shù)據(jù),與UNIX函數(shù)read等效,參數(shù)與read相同。

 

函數(shù)名 syswrite
調(diào)用語(yǔ)法 syswrite (filevar, data, length, skipval);
解說(shuō) 更快的寫(xiě)入數(shù)據(jù),與UNIX函數(shù)write等效,參數(shù):
1、filevar:將要寫(xiě)入的文件
2、data:存貯要寫(xiě)入數(shù)據(jù)的變量
3、length:要寫(xiě)入的字節(jié)數(shù)
4、skipval寫(xiě)操作之前跳過(guò)的字節(jié)數(shù)。

 

4、用getc讀取字符

 

函數(shù)名 getc
調(diào)用語(yǔ)法 $char = getc (infile);
解說(shuō) 從文件中讀取單個(gè)字符。

 

5、用binmode讀取二進(jìn)制文件

 

函數(shù)名 binmode
調(diào)用語(yǔ)法 binmode (filevar);
解說(shuō) 當(dāng)你的系統(tǒng)(如類(lèi)DOS系統(tǒng))對(duì)文本文件和二進(jìn)制文件有所區(qū)別時(shí)使用。必須在打開(kāi)文件后、讀取文件前使用。

 

二、目錄處理函數(shù)

 

函數(shù)名 mkdir
調(diào)用語(yǔ)法 mkdir (dirname, permissions);
解說(shuō) 創(chuàng)建新目錄,參數(shù)為:
1、dirname:將要?jiǎng)?chuàng)建的目錄名,可以為字符串或表達(dá)式
2、permissions:8進(jìn)制數(shù),指定目錄的訪問(wèn)權(quán)限,其值和意義見(jiàn)下表,權(quán)限的組合方法為將相應(yīng)的值相加。

 

權(quán)限
4000 ? 運(yùn)行時(shí)設(shè)置用戶(hù)ID ?
2000 運(yùn)行時(shí)設(shè)置組ID
1000 粘貼位
0400 擁有者讀權(quán)限
0200 擁有者寫(xiě)權(quán)限
0100 擁有者執(zhí)行權(quán)限
0040 組讀權(quán)限
0020 組寫(xiě)權(quán)限
0010 組執(zhí)行權(quán)限
0004 所有人讀權(quán)限
0002 所有人寫(xiě)權(quán)限
0001 所有人執(zhí)行權(quán)限

 

函數(shù)名 chdir
調(diào)用語(yǔ)法 chdir (dirname);
解說(shuō) 改變當(dāng)前工作目錄。參數(shù)dirname可以為字符串,也可以為表達(dá)式。

 

函數(shù)名 opendir
調(diào)用語(yǔ)法 opendir (dirvar, dirname);
解說(shuō) 打開(kāi)目錄,與下面幾個(gè)函數(shù)合用,可查看某目錄中文件列表。參數(shù)為:
1、dirvar:目錄變量,與文件變量類(lèi)似
2、dirname:目錄名,可為字符串或表達(dá)式
成功返回真值,失敗返回假。
注:程序中可用同名的目錄變量和文件變量,根據(jù)環(huán)境確定取成分。

 

函數(shù)名 closedir
調(diào)用語(yǔ)法 closedir (mydir);
解說(shuō) 關(guān)閉打開(kāi)的目錄。

 

函數(shù)名 readdir
調(diào)用語(yǔ)法 readdir (mydir);
解說(shuō) 賦給簡(jiǎn)單變量時(shí),每次賦予一個(gè)文件或子目錄名,對(duì)數(shù)組則賦予全部文件和子目錄名。

 

函數(shù)名 telldir
調(diào)用語(yǔ)法 location = telldir (mydir);
解說(shuō) 象在文件中前后移動(dòng)一樣,telldir和下面的seekdir用于在目錄列表中前后移動(dòng)。

 

函數(shù)名 seekdir
調(diào)用語(yǔ)法 seekdir(mydir, location);
解說(shuō) location必須為telldir返回的值。

 

函數(shù)名 rewinddir
調(diào)用語(yǔ)法 rewinddir (mydir);
解說(shuō) 將讀取目錄的位置重置回開(kāi)頭,從而可以重讀目錄列表。

 

函數(shù)名 rmdir
調(diào)用語(yǔ)法 rmdir (dirname);
解說(shuō) 刪除空目錄。成功則返回真(非零值),失敗返回假(零值)。

 

三、文件屬性函數(shù)
1、文件重定位函數(shù)

 

函數(shù)名 rename
調(diào)用語(yǔ)法 rename (oldname, newname);
解說(shuō) 改變文件名或移動(dòng)到另一個(gè)目錄中,參數(shù)可為字符串或表達(dá)式。

 

函數(shù)名 unlink
調(diào)用語(yǔ)法 num = unlink (filelist);
解說(shuō) 刪除文件。參數(shù)為文件名列表,返回值為實(shí)際刪除的文件數(shù)目。
此函數(shù)之所以叫unlink而不叫delete是因?yàn)樗鼘?shí)際所做的是刪除文件的鏈接。

 

2、鏈接和符號(hào)鏈接函數(shù)

 

函數(shù)名 link
調(diào)用語(yǔ)法 link (newlink, file);
解說(shuō) 創(chuàng)建現(xiàn)有文件的鏈接--硬鏈接,file是被鏈接的文件,newlink是被創(chuàng)建的鏈接。
成功返回真,失敗返回假。
當(dāng)刪除這兩個(gè)鏈接中的一個(gè)時(shí),還可以用另一個(gè)來(lái)訪問(wèn)該文件。

 

函數(shù)名 symlink
調(diào)用語(yǔ)法 symlink (newlink, file);
解說(shuō) 創(chuàng)建現(xiàn)有文件的符號(hào)鏈接,即指向文件名,而不是指向文件本身。參數(shù)和返回值同上。
當(dāng)原文件被刪除(如:被unlinke函數(shù)刪除),則被創(chuàng)建鏈接不可用,除非再創(chuàng)建一個(gè)與原被鏈接的文件同名的文件。

 

函數(shù)名 readlink
調(diào)用語(yǔ)法 filename = readlink (linkname);
解說(shuō) 如果linkname為符號(hào)鏈接文件,返回其實(shí)際指向的文件。否則返回空串。

 

3、文件許可權(quán)函數(shù)

 

函數(shù)名 chmod
調(diào)用語(yǔ)法 chmod (permissions, filelist);
解說(shuō) 改變文件的訪問(wèn)權(quán)限。參數(shù)為:
1、permissions為將要設(shè)置的權(quán)限,其含義見(jiàn)上述mkdir中權(quán)限表
2、filelist為欲改變權(quán)限的文件列表

 

函數(shù)名 chown
調(diào)用語(yǔ)法 chown (userid, groupid, filelist);
解說(shuō) 改變文件的屬主,有三個(gè)參數(shù):
1、userid:新屬主的(數(shù)字)ID號(hào)
2、groupid:新的組(數(shù)字)ID號(hào),-1為保留原組
3、filelist:欲改變屬主的文件列表

 

函數(shù)名 umask
調(diào)用語(yǔ)法 oldmaskval = umask (maskval);
解說(shuō) 設(shè)置文件訪問(wèn)權(quán)限掩碼,返回值為當(dāng)前掩碼。

 

4、其它屬性函數(shù)

 

函數(shù)名 truncate
調(diào)用語(yǔ)法 truncate (filename, length);
解說(shuō) 將文件的長(zhǎng)度減少到length字節(jié)。如果文件長(zhǎng)度已經(jīng)小于length,則不做任何事。其中filename可以為文件名,也可以為文件變量

 

函數(shù)名 stat
調(diào)用語(yǔ)法 stat (file);
解說(shuō) 獲取文件狀態(tài)。參數(shù)file可為文件名也可為文件變量。返回列表元素依次為:
  • 文件所在設(shè)備
  • 內(nèi)部參考號(hào)(inode)
  • 訪問(wèn)權(quán)限
  • 硬鏈接數(shù)
  • 屬主的(數(shù)字)ID
  • 所屬組的(數(shù)字)ID
  • 設(shè)備類(lèi)型(如果file是設(shè)備的話)
  • 文件大小(字節(jié)數(shù))
  • 最后訪問(wèn)時(shí)間
  • 最后修改時(shí)間最后改變狀態(tài)時(shí)間
  • I/O操作最佳塊大小
  • 分配給該文件的塊數(shù)

 

函數(shù)名 lstat
調(diào)用語(yǔ)法 lstat (file);
解說(shuō) 與stat類(lèi)似,區(qū)別是將file看作是符號(hào)鏈接。

 

函數(shù)名 time
調(diào)用語(yǔ)法 currtime = time();
解說(shuō) 返回從1970年1月1日起累計(jì)秒數(shù)。

 

函數(shù)名 gmtime
調(diào)用語(yǔ)法 timelist = gmtime (timeval);
解說(shuō) 將由time, stat 或 -A 和 -M 文件測(cè)試操作符返回的時(shí)間轉(zhuǎn)換成格林威治時(shí)間。返回列表元素依次為:
  • 分鐘
  • 小時(shí),0~23
  • 日期
  • 月份,0~11(一月~十二月)
  • 年份
  • 星期,0~6(周日~周六)
  • 一年中的日期,0~364
  • 是否夏令時(shí)的標(biāo)志
    詳見(jiàn)UNIX的gmtime幫助。

 

函數(shù)名 localtime
調(diào)用語(yǔ)法 timelist = localtime (timeval);
解說(shuō) 與gmtime類(lèi)似,區(qū)別為將時(shí)間值轉(zhuǎn)換為本地時(shí)間。

 

函數(shù)名 utime
調(diào)用語(yǔ)法 utime (acctime, modtime, filelist);
解說(shuō) 改變文件的最后訪問(wèn)時(shí)間和最后更改時(shí)間。例如:
$acctime = -A "file1";
$modtime = -M "file1";
@filelist = ("file2", "file3");
utime ($acctime, $modtime, @filelist);

 

函數(shù)名 fileno
調(diào)用語(yǔ)法 filedesc = fileno (filevar);
解說(shuō) 返回文件的內(nèi)部UNIX文件描述。參數(shù)filevar為文件變量。

 

函數(shù)名 fcntl
flock
調(diào)用語(yǔ)法 fcntl (filevar, fcntlrtn, value);
flock (filevar, flockop);
解說(shuō) 詳見(jiàn)同名UNIX函數(shù)幫助。

 

四、使用DBM文件
???Perl中可用關(guān)聯(lián)數(shù)組來(lái)訪問(wèn)DBM文件,所用函數(shù)為dbmopen和dbmclose,在Perl5中,已用tie和untie代替。

 

函數(shù)名 dbmopen
調(diào)用語(yǔ)法 dbmopen (array, dbmfilename, permissions);
解說(shuō) 將關(guān)聯(lián)數(shù)組與DBM文件相關(guān)聯(lián)。參數(shù)為:
1、array:所用關(guān)聯(lián)數(shù)組
2、dbmfilename:將打開(kāi)的DBM文件名
3、訪問(wèn)權(quán)限,詳見(jiàn)mkdir

 

函數(shù)名 dbmclose
調(diào)用語(yǔ)法 dbmclose (array);
解說(shuō) 關(guān)閉DBM文件,拆除關(guān)聯(lián)數(shù)組與之的關(guān)系。
Artikel sebelumnya: Artikel seterusnya: