Perl檔案系統

來源:互聯網
上載者:User

一、檔案輸入/輸出函數

1、基本I/O函數

open:允許程式訪問檔案 

close:終止檔案訪問 

print:檔案寫入字串 

write:向檔案寫入格式化資訊 

printf:格式化字串並輸出到檔案 

1)open函數

open函數將檔案變數與某檔案聯絡起來,提供訪問檔案的介面,例如:open(MYVAR, "/u/file"); 如果檔案開啟成功,則返回非零值,否則返回零。預設地,open開啟檔案用以讀取其內容,若想開啟檔案以寫入內容,則在檔案名稱前加個大於符號:open(MYVAR, ">/u/file"); 向已有的檔案末尾新增內容用兩個大於符號:open(MYVAR, ">>/u/file"); 若想開啟檔案作為資料導向的命令,則在命令前加上管道符(|):open(MAIL, "|mail dave");

2)用open重新導向輸入

可以把開啟的檔案控制代碼用作向程式輸入資料的命令,方法是在命令後加管道符(|),如:

open(CAT, "cat file*|");

對open的調用運行命令cat file* ,此命令建立一個臨時檔案,這個檔案的內容是所有以file打頭的檔案的內容串連而成,此檔案看作輸入檔案,可用檔案變數CAT訪問。

3)檔案重新導向

Perl實現把標準輸出檔案(STDOUT)和標準錯誤檔案(STDERR)都重新導向到同一個檔案:

open (STDOUT, ">file1") || die ("open STDOUT failed");

open (STDERR, ">&STDOUT") || die ("open STDERR failed");

為瞭解決UNIX檔案快取延時的問題,可以告訴Perl解譯器不對檔案使用緩衝,方法為:

1、用select函數選擇檔案

2、把值1賦給系統變數$|

系統變數$|指定檔案是否進行緩衝而不管其是否應該使用緩衝。如果$|為非零值則不使用緩衝。$|與系統變數$~和$^協同工作,當未調用select函數時,$|影響當前預設檔案。

4)指定讀寫權限

開啟一個既可讀又可寫的檔案方法是在檔案名稱前加上"+>",如下:

open (READWRITE, "+>file1");

此語句開啟既可讀又可寫的檔案file1,即可以重寫其中的內容。檔案讀寫操作最好與庫函數seek和tell一起使用,這樣可以跳到檔案任何一點。

註:也可用首碼"+<"指定可讀寫權限。

5)close函數

用於關閉開啟的檔案。當用close關閉管道,即重新導向的命令時,程式等待重新導向的命令結束,如:

open (MYPIPE, "cat file*|");

close (MYPIPE);

當關閉此檔案變數時,程式暫停運行,直到命令cat file*運行完畢。

6)print, printf和write函數

print是這三個函數中最簡單的,它向指定的檔案輸出,如果未指定,則輸出到當前預設檔案中。

printf函數先格式化字串再輸出到指定檔案或當前預設檔案中。

write函數使用輸出格式把資訊輸出到檔案中。

7)select函數

select函數將通過參數傳遞的檔案變數指定為新的當前預設檔案。

8)eof函數

eof函數查看最後一次讀檔案操作是否為檔案最後一個記錄,如果是,則返回非零值,如果檔案還有內容,返回零。

一般情況下,對eof的調用不加括弧,因為eof和eof()是等效的,但與<>操作符一起使用時,eof和eof()就不同了。

在多個檔案作為輸入參數時,只有所有檔案都讀過了,eof()才返回真,如果只是多個檔案中前幾個的末尾,傳回值為假,因為還有要讀取的輸入。

9)間接檔案變數

對於上述各函數open, close, print, printf, write, select和eof,都可以用簡單變數來代替檔案變數,這時,簡單變數中所存貯的字串就被看作檔案變數名,下面就是這樣一個例子,此例很簡單,就不解釋了。需要指出的是,函數open, close, write, select和eof還允許用運算式來替代檔案變數,運算式的值必須是字串,被用作檔案變數名。

2、跳過和重讀資料

函數名 seek 

調用文法 seek (filevar, distance, relative_to); 

解說 在檔案中向前/後移動,有三個參數:

1、filevar,檔案變數

2、distance,移動的位元組數,正數向前移動,負數往回移動

3、reletive_to,值可為0、1或2。為0時,從檔案頭開始移動,為1時,相對於當前位置(將要讀的下一行)移動,為2時,相對於檔案末尾移動。

運行成功返回真(非零值),失敗則返回零,常與tell函數合用。

函數名 tell 

調用文法 tell (filevar); 

解說 返回從檔案頭到當前位置的距離。

注意:

1、seek和tell不能用於指向管道的檔案變數。

2、seek和tell中檔案變數參數可使用運算式。

3、系統讀寫函數

函數名 read 

調用文法 read (filevar, result, length, skipval); 

解說 read函數設計得與UNIX的fread函數等效,可以讀取任意長度的字元(位元組)存入一個簡單變數。其參數有四個:

1、filevar:檔案變數

2、result:存貯結果的簡單變數(或數組元素)

3、length:讀取的位元組數

4、skipval:可選項,指定讀檔案之前跳過的位元組數。

傳回值為實際讀取的位元組數,如果已到了檔案末尾,則返回零,如果出錯,則返回空串。

函數名 sysread 

調用文法 sysread (filevar, result, length, skipval); 

解說 更快的讀取資料,與UNIX函數read等效,參數與read相同。

函數名 syswrite 

調用文法 syswrite (filevar, data, length, skipval); 

解說 更快的寫入資料,與UNIX函數write等效,參數:

1、filevar:將要寫入的檔案

2、data:存貯要寫入資料的變數

3、length:要寫入的位元組數

4、skipval寫操作之前跳過的位元組數。

4、用getc讀取字元

函數名 getc 

調用文法 $char = getc (infile); 

解說 從檔案中讀取單個字元。

5、用binmode讀取二進位檔案

函數名 binmode 

調用文法 binmode (filevar); 

解說 當你的系統(如類DOS系統)對文字檔和二進位檔案有所區別時使用。必須在開啟檔案後、讀取檔案前使用。

二、目錄處理函數 

函數名 mkdir 

調用文法 mkdir (dirname, permissions); 

解說 建立新目錄,參數為:

1、dirname:將要建立的目錄名,可以為字串或運算式

2、permissions:8進位數,指定目錄的存取權限,其值和意義見下表,許可權的組合方法為將相應的值相加。

值 許可權 

4000 運行時設定使用者ID 

2000 運行時設定組ID 

1000 粘貼位 

0400 擁有者讀許可權 

0200 擁有者寫入權限 

0100 擁有者執行許可權 

0040 組讀許可權 

0020 組寫入權限 

0010 組執行許可權 

0004 所有人讀許可權 

0002 所有人寫入權限 

0001 所有人執行許可權

函數名 chdir 

調用文法 chdir (dirname); 

解說 改變當前工作目錄。參數dirname可以為字串,也可以為運算式。

函數名 opendir 

調用文法 opendir (dirvar, dirname); 

解說 開啟目錄,與下面幾個函數合用,可查看某目錄中檔案清單。參數為:

1、dirvar:目錄變數,與檔案變數類似

2、dirname:目錄名,可為字串或運算式

成功返回真值,失敗返回假。

註:程式中可用同名的目錄變數和檔案變數,根據環境確定取成分。

函數名 closedir 

調用文法 closedir (mydir); 

解說 關閉開啟的目錄。

函數名 readdir 

調用文法 readdir (mydir); 

解說 賦給簡單變數時,每次賦予一個檔案或子目錄名,對數組則賦予全部檔案和子目錄名。

函數名 telldir 

調用文法 location = telldir (mydir); 

解說 象在檔案中前後移動一樣,telldir和下面的seekdir用於在目錄列表中前後移動。

函數名 seekdir 

調用文法 seekdir(mydir, location); 

解說 location必須為telldir返回的值。

函數名 rewinddir 

調用文法 rewinddir (mydir); 

解說 將讀取目錄的位置重設回開頭,從而可以重讀目錄列表。

函數名 rmdir 

調用文法 rmdir (dirname); 

解說 刪除空目錄。成功則返回真(非零值),失敗返回假(零值)。

三、檔案屬性函數

1、檔案重定位函數

函數名 rename 

調用文法 rename (oldname, newname); 

解說 改變檔案名稱或移動到另一個目錄中,參數可為字串或運算式。

函數名 unlink 

調用文法 num = unlink (filelist); 

解說 刪除檔案。參數為檔案名稱列表,傳回值為實際刪除的檔案數目。

此函數之所以叫unlink而不叫delete是因為它實際所做的是刪除檔案的連結。

2、連結和符號連結函數

函數名 link 

調用文法 link (newlink, file); 

解說 建立現有檔案的連結--永久連結,file是被連結的檔案,newlink是被建立的連結。

成功返回真,失敗返回假。

當刪除這兩個連結中的一個時,還可以用另一個來訪問該檔案。

函數名 symlink 

調用文法 symlink (newlink, file); 

解說 建立現有檔案的符號連結,即指向檔案名稱,而不是指向檔案本身。參數和傳回值同上。

當原檔案被刪除(如:被unlinke函數刪除),則被建立連結不可用,除非再建立一個與原被連結的檔案同名的檔案。

函數名 readlink 

調用文法 filename = readlink (linkname); 

解說 如果linkname為符號連結檔案,返回其實際指向的檔案。否則返回空串。

3、檔案許可權函數

函數名 chmod 

調用文法 chmod (permissions, filelist); 

解說 改變檔案的存取權限。參數為:

1、permissions為將要設定的許可權,其含義見上述mkdir中許可權表

2、filelist為欲改變許可權的檔案清單

函數名 chown 

調用文法 chown (userid, groupid, filelist); 

解說 改變檔案的屬主,有三個參數:

1、userid:新屬主的(數字)ID號

2、groupid:新的組(數字)ID號,-1為保留原組

3、filelist:欲改變屬主的檔案清單

函數名 umask 

調用文法 oldmaskval = umask (maskval); 

解說 設定檔案存取權限掩碼,傳回值為當前掩碼。

4、其它屬性函數

函數名 truncate 

調用文法 truncate (filename, length); 

解說 將檔案的長度減少到length位元組。如果檔案長度已經小於length,則不做任何事。其中filename可以為檔案名稱,也可以為檔案變數

函數名 stat 

調用文法 stat (file); 

解說 擷取檔案狀態。參數file可為檔案名稱也可為檔案變數。返回列表元素依次為:

檔案所在裝置

內部參考號(inode)

存取權限

永久連結數

屬主的(數字)ID

所屬組的(數字)ID

裝置類型(如果file是裝置的話)

檔案大小(位元組數)

最後訪問時間

最後修改時間最後改變狀態時間

I/O操作最佳塊大小

分配給該檔案的塊數

函數名 lstat 

調用文法 lstat (file); 

解說 與stat類似,區別是將file看作是符號連結。

函數名 time 

調用文法 currtime = time(); 

解說 返回從1970年1月1日起累計秒數。

函數名 gmtime 

調用文法 timelist = gmtime (timeval); 

解說 將由time, stat 或 -A 和 -M 檔案測試操作符返回的時間轉換成格林威治時間。返回列表元素依次為:

分鐘

小時,0~23

日期

月份,0~11(一月~十二月)

年份

星期,0~6(周日~周六)

一年中的日期,0~364

是否夏令時的標誌

詳見UNIX的gmtime協助。

函數名 localtime 

調用文法 timelist = localtime (timeval); 

解說 與gmtime類似,區別為將時間值轉換為本地時間。

函數名 utime 

調用文法 utime (acctime, modtime, filelist); 

解說 改變檔案的最後訪問時間和最後更改時間。例如:

$acctime = -A "file1";

$modtime = -M "file1";

@filelist = ("file2", "file3");

utime ($acctime, $modtime, @filelist);

函數名 fileno 

調用文法 filedesc = fileno (filevar); 

解說 返迴文件的內部UNIX檔案描述。參數filevar為檔案變數。

函數名 fcntl

flock 

調用文法 fcntl (filevar, fcntlrtn, value);

flock (filevar, flockop); 

解說 詳見同名UNIX函數協助。

四、使用DBM檔案

Perl中可用關聯陣列來訪問DBM檔案,所用函數為dbmopen和dbmclose,在Perl5中,已用tie和untie代替。 

函數名 dbmopen 

調用文法 dbmopen (array, dbmfilename, permissions); 

解說 將關聯陣列與DBM檔案相關聯。參數為:

1、array:所用關聯陣列

2、dbmfilename:將開啟的DBM檔案名稱

3、存取權限,詳見mkdir

函數名 dbmclose 

調用文法 dbmclose (array); 

解說 關閉DBM檔案,拆除關聯陣列與之的關係。

轉帖自:http://apps.hi.baidu.com/share/detail/16811545
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.