資源描述:
《linuxc常用文件處理函數(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、本文轉(zhuǎn)載于:[url]http://www.91linux.com/html/article/program/cpp/20071203/8774.html[/url]有點(diǎn)多阿,但很豐富。各位Linux愛好者: 你好!本人有幸在坊間得到一名為“LinuxC函數(shù)參考”的文本文件,并在此基礎(chǔ)重新排版并制成html文件以方便廣大愛好者閱讀,我感到無(wú)比的榮幸。在此多謝各位的鼎力支持,以及日益完善此文件,希望有朝一日能成為L(zhǎng)inux編程愛好者必備的參考文件。在此再次多謝編寫“LinuxC函數(shù)參考”的朋友?! ÷暶鳎罕救瞬粨碛形恼滤袡?quán)。本人會(huì)對(duì)本文件文章內(nèi)排版出現(xiàn)的錯(cuò)誤或遺漏內(nèi)容以及日后提出
2、的相關(guān)請(qǐng)求作出最大限度修改,有問(wèn)題可e-mail:pennyhot@21cn.com,別炸我的郵箱:-)PennyHot 2003.06.06 ?access(判斷是否具有存取文件的權(quán)限)相關(guān)函數(shù)?stat,open,chmod,chown,setuid,setgid表頭文件?#include定義函數(shù)?intaccess(constchar*pathname,intmode);函數(shù)說(shuō)明?access()會(huì)檢查是否可以讀/寫某一已存在的文件。參數(shù)mode有幾種情況組合,R_OK,W_OK,X_OK和F_OK。R_OK,W_OK與X_OK用來(lái)檢查文件是否具有讀取、寫
3、入和執(zhí)行的權(quán)限。F_OK則是用來(lái)判斷該文件是否存在。由于access()只作權(quán)限的核查,并不理會(huì)文件形態(tài)或文件內(nèi)容,因此,如果一目錄表示為“可寫入”,表示可以在該目錄中建立新文件等操作,而非意味此目錄可以被當(dāng)做文件處理。例如,你會(huì)發(fā)現(xiàn)DOS的文件都具有“可執(zhí)行”權(quán)限,但用execve()執(zhí)行時(shí)則會(huì)失敗。返回值?若所有欲查核的權(quán)限都通過(guò)了檢查則返回0值,表示成功,只要有一權(quán)限被禁止則返回-1。錯(cuò)誤代碼?EACCESS參數(shù)pathname所指定的文件不符合所要求測(cè)試的權(quán)限。EROFS欲測(cè)試寫入權(quán)限的文件存在于只讀文件系統(tǒng)內(nèi)。EFAULT參數(shù)pathname指針超出可存取內(nèi)存空間。EIN
4、VAL參數(shù)mode不正確。ENAMETOOLONG參數(shù)pathname太長(zhǎng)。ENOTDIR參數(shù)pathname為一目錄。ENOMEM核心內(nèi)存不足ELOOP參數(shù)pathname有過(guò)多符號(hào)連接問(wèn)題。EIOI/O存取錯(cuò)誤。附加說(shuō)明?使用access()作用戶認(rèn)證方面的判斷要特別小心,例如在access()后再做open()的空文件可能會(huì)造成系統(tǒng)安全上的問(wèn)題。范例?/*判斷是否允許讀取/etc/passwd*/#includeintmain(){if(access(“/etc/passwd”,R_OK)==0)printf(“/etc/passwdcanberead
5、”);}執(zhí)行?/etc/passwdcanberead ?alphasort(依字母順序排序目錄結(jié)構(gòu))相關(guān)函數(shù)?scandir,qsort表頭文件?#include定義函數(shù)?intalphasort(conststructdirent**a,conststructdirent**b);函數(shù)說(shuō)明?alphasort()為scandir()最后調(diào)用qsort()函數(shù)時(shí)傳給qsort()作為判斷的函數(shù),詳細(xì)說(shuō)明請(qǐng)參考scandir()及qsort()。返回值?參考qsort()。范例?/*讀取/目錄下所有的目錄結(jié)構(gòu),并依字母順序排列*/main(){structdir
6、ent**namelist;inti,total;total=scandir(“/”,&namelist,0,alphasort);if(total<0)perror(“scandir”);else{for(i=0;id_name);printf(“total=%d”,total);}}執(zhí)行?...gnome.gnome_privateErrorLogWeblogbinbootdevdoscdosdetchomeliblost+foundmiscmntoptprocrootsbintmpusrvarto
7、tal=24chdir(改變當(dāng)前的工作(目錄)相關(guān)函數(shù)?getcwd,chroot表頭文件?#include定義函數(shù)?intchdir(constchar*path);函數(shù)說(shuō)明?chdir()用來(lái)將當(dāng)前的工作目錄改變成以參數(shù)path所指的目錄。返回值?執(zhí)行成功則返回0,失敗返回-1,errno為錯(cuò)誤代碼。范例?#includemain(){chdir(“/tmp”);printf(“currentworkingdirectory