stat(由文件描述詞取得文件狀態(tài))
相關(guān)函數(shù)
stat,fstat,chmod,chown,readlink,utime
表頭文件
#include<sys/stat.h>
#include<unistd.h>
定義函數(shù)
int lstat (const char * file_name.struct stat * buf);
函數(shù)說(shuō)明
lstat()與stat()作用完全相同,都是取得參數(shù)file_name所指的文件狀態(tài),其差別在于,當(dāng)文件為符號(hào)連接時(shí),lstat()會(huì)返回該link本身的狀態(tài)。詳細(xì)內(nèi)容請(qǐng)參考stat()。
返回值
執(zhí)行成功則返回0,失敗返回-1,錯(cuò)誤代碼存于errno。
范例
參考stat()。
opendir(打開(kāi)目錄)
相關(guān)函數(shù)
open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表頭文件
#include<sys/types.h>
#include<dirent.h>
定義函數(shù)
DIR * opendir(const char * name);
函數(shù)說(shuō)明
opendir()用來(lái)打開(kāi)參數(shù)name指定的目錄,并返回DIR*形態(tài)的目錄流,和open()類似,接下來(lái)對(duì)目錄的讀取和搜索都要使用此返回值。
返回值
成功則返回DIR* 型態(tài)的目錄流,打開(kāi)失敗則返回NULL。
錯(cuò)誤代碼
EACCESS 權(quán)限不足
EMFILE 已達(dá)到進(jìn)程可同時(shí)打開(kāi)的文件數(shù)上限。
ENFILE 已達(dá)到系統(tǒng)可同時(shí)打開(kāi)的文件數(shù)上限。
ENOTDIR 參數(shù)name非真正的目錄
ENOENT 參數(shù)name 指定的目錄不存在,或是參數(shù)name 為一空字符串。
ENOMEM 核心內(nèi)存不足。
readdir(讀取目錄)
相關(guān)函數(shù)
open,opendir,closedir,rewinddir,seekdir,telldir,scandir
表頭文件
#include<sys/types.h>
#include<dirent.h>
定義函數(shù)
struct dirent * readdir(DIR * dir);
函數(shù)說(shuō)明
readdir()返回參數(shù)dir目錄流的下個(gè)目錄進(jìn)入點(diǎn)。
結(jié)構(gòu)dirent定義如下
struct dirent
{
ino_t d_ino;
ff_t d_off;
signed short int d_reclen;
unsigned char d_type;
har d_name[256];
};
d_ino 此目錄進(jìn)入點(diǎn)的inode
d_off 目錄文件開(kāi)頭至此目錄進(jìn)入點(diǎn)的位移
d_reclen _name的長(zhǎng)度,不包含NULL字符
d_type d_name 所指的文件類型
d_name 文件名
返回值
成功則返回下個(gè)目錄進(jìn)入點(diǎn)。有錯(cuò)誤發(fā)生或讀取到目錄文件尾則返回NULL。
附加說(shuō)明
EBADF參數(shù)dir為無(wú)效的目錄流。
范例
#include<sys/types.h>
#include<dirent.h>
#include<unistd.h>
main()
{
DIR * dir;
struct dirent * ptr;
int i;
dir =opendir(“/etc/rc.d”);
while((ptr = readdir(dir))!=NULL)
{
printf(“d_name: %sn”,ptr->d_name);
}
closedir(dir);
}
readlink(取得符號(hào)連接所指的文件)
相關(guān)函數(shù)
stat,lstat,symlink
表頭文件
#include<unistd.h>
定義函數(shù)
int readlink(const char * path ,char * buf,size_t bufsiz);
函數(shù)說(shuō)明
readlink()會(huì)將參數(shù)path的符號(hào)連接內(nèi)容存到參數(shù)buf所指的內(nèi)存空間,返回的內(nèi)容不是以NULL作字符串結(jié)尾,但會(huì)將字符串的字符數(shù)返回。若參數(shù)bufsiz小于符號(hào)連接的內(nèi)容長(zhǎng)度,過(guò)長(zhǎng)的內(nèi)容會(huì)被截?cái)唷?/span>
返回值
執(zhí)行成功則傳符號(hào)連接所指的文件路徑字符串,失敗則返回-1,錯(cuò)誤代碼存于errno。
錯(cuò)誤代碼
EACCESS 取文件時(shí)被拒絕,權(quán)限不夠
EINVAL 參數(shù)bufsiz 為負(fù)數(shù)
EIO I/O 存取錯(cuò)誤。
ELOOP 欲打開(kāi)的文件有過(guò)多符號(hào)連接問(wèn)題。
ENAMETOOLONG 參數(shù)path的路徑名稱太長(zhǎng)
ENOENT 參數(shù)path所指定的文件不存在
ENOMEM 核心內(nèi)存不足
ENOTDIR 參數(shù)path路徑中的目錄存在但卻非真正的目錄。
remove(刪除文件)
相關(guān)函數(shù) link,rename
表頭文件
#include<stdio.h>
定義函數(shù)
int remove(const char * pathname);
函數(shù)說(shuō)明
remove()會(huì)刪除參數(shù)pathname指定的文件。如果參數(shù)pathname為一文件,則調(diào)用unlink()處理,若參數(shù)pathname為一目錄,則調(diào)用rmdir()來(lái)處理。請(qǐng)參考unlink()與rmdir()。
返回值
成功則返回0,失敗則返回-1,錯(cuò)誤原因存于errno。
錯(cuò)誤代碼
EROFS 欲寫入的文件存在于只讀文件系統(tǒng)內(nèi)
EFAULT 參數(shù)pathname指針超出可存取內(nèi)存空間
ENAMETOOLONG 參數(shù)pathname太長(zhǎng)
ENOMEM 核心內(nèi)存不足
ELOOP 參數(shù)pathname有過(guò)多符號(hào)連接問(wèn)題
EIO I/O 存取錯(cuò)誤。
rename(更改文件名稱或位置)
相關(guān)函數(shù)
link,unlink,symlink
表頭文件
#include<stdio.h>
定義函數(shù)
int rename(const char * oldpath,const char * newpath);
函數(shù)說(shuō)明
rename()會(huì)將參數(shù)oldpath 所指定的文件名稱改為參數(shù)newpath所指的文件名稱。若newpath所指定的文件已存在,則會(huì)被刪除。
返回值
執(zhí)行成功則返回0,失敗返回-1,錯(cuò)誤原因存于errno
范例
/* 設(shè)計(jì)一個(gè)DOS下的rename指令rename 舊文件名新文件名*/
#include <stdio.h>
void main(int argc,char **argv)
{
if(argc<3){
printf(“Usage: %s old_name new_namen”,argv[0]);
return;
}
printf(“%s=>%s”,argc[1],argv[2]);
if(rename(argv[1],argv[2]<0)
printf(“error!n”);
else
printf(“ok!n”);
}
rewinddir(重設(shè)讀取目錄的位置為開(kāi)頭位置)
相關(guān)函數(shù)
open,opendir,closedir,telldir,seekdir,readdir,scandir
表頭文件
#include<sys/types.h>
#include<dirent.h>
定義函數(shù)
void rewinddir(DIR *dir);
函數(shù)說(shuō)明
rewinddir()用來(lái)設(shè)置參數(shù)dir 目錄流目前的讀取位置為原來(lái)開(kāi)頭的讀取位置。
返回值
錯(cuò)誤代碼
EBADF dir為無(wú)效的目錄流
范例
#include<sys/types.h>
#include<dirent.h>
#include<unistd.h>
main()
{
DIR * dir;
struct dirent *ptr;
dir = opendir(“/etc/rc.d”);
while((ptr = readdir(dir))!=NULL)
{
printf(“d_name :%sn”,ptr->d_name);
}
rewinddir(dir);
printf(“readdir again!n”);
while((ptr = readdir(dir))!=NULL)
{
printf(“d_name: %sn”,ptr->d_name);
}
closedir(dir);
}
聯(lián)系客服