一、檔案輸入/輸出函數
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