欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

第十一章  文件系統(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、跳過(guò)和重讀數(shù)據(jù)
  3、系統(tǒng)讀寫函數(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é)講述從文件中讀取信息和向文件寫入信息的內(nèi)置庫(kù)函數(shù)。
1、基本I/O函數(shù)
    一些I/O函數(shù)在前面的章節(jié)中已有講述,如
  • open:允許程序訪問(wèn)文件
  • close:終止文件訪問(wèn)
  • print:文件寫入字符串
  • write:向文件寫入格式化信息
  • 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)文件以寫入內(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)前登錄的所有用戶名。
    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ù)載和登錄的用戶,以及每個(gè)用戶的作業(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í)間和登錄的用戶名。第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è)元素都是一行用戶信息,因?yàn)楸境绦蛑恍枰啃械牡谝粋(gè)單詞,即用戶名,故10~12行去掉除換行符外的其它字符,這一循環(huán)結(jié)束后,@users中只剩下用戶名的列表。
        第13行輸出存貯在$time中的時(shí)間,注意這時(shí)print不需要加上換行符,因?yàn)?time中有。16~21行對(duì)@users中的用戶名排序并輸出。因?yàn)橥粋(gè)用戶可以多次登錄,所以用$preuser存貯輸出的最后一個(gè)用戶名,下次輸出數(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寫入數(shù)據(jù),因?yàn)檫@兩個(gè)文件變量指向同一個(gè)文件,故兩行字符串均寫到文件file1中,但順序卻是錯(cuò)誤的,怎么回事呢?
        問(wèn)題在于UNIX對(duì)輸出的處理上。當(dāng)使用print(或其它函數(shù))寫入STDOUT等文件時(shí),UNIX操作系統(tǒng)真正所做的是把數(shù)據(jù)拷貝到一片特殊的內(nèi)存即緩沖區(qū)中,接下來(lái)的輸出操作繼續(xù)寫入緩沖區(qū)直到寫滿,當(dāng)緩沖區(qū)滿了,就把全部數(shù)據(jù)實(shí)際輸出。象這樣先寫入緩沖區(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)掉,向其的輸出立刻被寫到文件中,因此line 1出現(xiàn)在第一行。
    4)指定讀寫權(quán)限
        打開(kāi)一個(gè)既可讀又可寫的文件方法是在文件名前加上"+>",如下:
         open (READWRITE, "+>file1");
        此語(yǔ)句打開(kāi)既可讀又可寫的文件file1,即可以重寫其中的內(nèi)容。文件讀寫操作最好與庫(kù)函數(shù)seek和tell一起使用,這樣可以跳到文件任何一點(diǎn)。
        注:也可用前綴"+<"指定可讀寫權(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()就不同了,F(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)讀寫函數(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ō) 更快的寫入數(shù)據(jù),與UNIX函數(shù)write等效,參數(shù):
    1、filevar:將要寫入的文件
    2、data:存貯要寫入數(shù)據(jù)的變量
    3、length:要寫入的字節(jié)數(shù)
    4、skipval寫操作之前跳過(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)(如類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è)置用戶ID  
    2000 運(yùn)行時(shí)設(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)用語(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:目錄變量,與文件變量類似
    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è)備類型(如果file是設(shè)備的話)
  • 文件大。ㄗ止(jié)數(shù))
  • 最后訪問(wèn)時(shí)間
  • 最后修改時(shí)間
  • 最后改變狀態(tài)時(shí)間
  • I/O操作最佳塊大小
  • 分配給該文件的塊數(shù)
  • 函數(shù)名 lstat
    調(diào)用語(yǔ)法 lstat (file);
    解說(shuō) 與stat類似,區(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類似,區(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)系。



    上一章 下一章 目錄