腌制的芥菜疙瘩怎么吃:dirent结构 --文件夹相关 - lizzy115的日志 - 网易博客
来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 07:41:16
stat(由文件描述词取得文件状态)
相关函数
stat,fstat,chmod,chown,readlink,utime
表头文件
#include
#include
定义函数
int lstat (const char * file_name.struct stat * buf);
函数说明
lstat()与stat()作用完全相同,都是取得参数file_name所指的文件状态,其差别在于,当文件为符号连接时,lstat()会返回该link本身的状态。详细内容请参考stat()。
返回值
执行成功则返回0,失败返回-1,错误代码存于errno。
范例
参考stat()。
opendir(打开目录)
相关函数
open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件
#include
#include
定义函数
DIR * opendir(const char * name);
函数说明
opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。
返回值
成功则返回DIR* 型态的目录流,打开失败则返回NULL。
错误代码
EACCESS 权限不足
EMFILE 已达到进程可同时打开的文件数上限。
ENFILE 已达到系统可同时打开的文件数上限。
ENOTDIR 参数name非真正的目录
ENOENT 参数name 指定的目录不存在,或是参数name 为一空字符串。
ENOMEM 核心内存不足。
readdir(读取目录)
相关函数
open,opendir,closedir,rewinddir,seekdir,telldir,scandir
表头文件
#include
#include
定义函数
struct dirent * readdir(DIR * dir);
函数说明
readdir()返回参数dir目录流的下个目录进入点。
结构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 此目录进入点的inode
d_off 目录文件开头至此目录进入点的位移
d_reclen _name的长度,不包含NULL字符
d_type d_name 所指的文件类型
d_name 文件名
返回值
成功则返回下个目录进入点。有错误发生或读取到目录文件尾则返回NULL。
附加说明
EBADF参数dir为无效的目录流。
范例
#include
#include
#include
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(取得符号连接所指的文件)
相关函数
stat,lstat,symlink
表头文件
#include
定义函数
int readlink(const char * path ,char * buf,size_t bufsiz);
函数说明
readlink()会将参数path的符号连接内容存到参数buf所指的内存空间,返回的内容不是以NULL作字符串结尾,但会将字符串的字符数返回。若参数bufsiz小于符号连接的内容长度,过长的内容会被截断。
返回值
执行成功则传符号连接所指的文件路径字符串,失败则返回-1,错误代码存于errno。
错误代码
EACCESS 取文件时被拒绝,权限不够
EINVAL 参数bufsiz 为负数
EIO I/O 存取错误。
ELOOP 欲打开的文件有过多符号连接问题。
ENAMETOOLONG 参数path的路径名称太长
ENOENT 参数path所指定的文件不存在
ENOMEM 核心内存不足
ENOTDIR 参数path路径中的目录存在但却非真正的目录。
remove(删除文件)
相关函数 link,rename
表头文件
#include
定义函数
int remove(const char * pathname);
函数说明
remove()会删除参数pathname指定的文件。如果参数pathname为一文件,则调用unlink()处理,若参数pathname为一目录,则调用rmdir()来处理。请参考unlink()与rmdir()。
返回值
成功则返回0,失败则返回-1,错误原因存于errno。
错误代码
EROFS 欲写入的文件存在于只读文件系统内
EFAULT 参数pathname指针超出可存取内存空间
ENAMETOOLONG 参数pathname太长
ENOMEM 核心内存不足
ELOOP 参数pathname有过多符号连接问题
EIO I/O 存取错误。
rename(更改文件名称或位置)
相关函数
link,unlink,symlink
表头文件
#include
定义函数
int rename(const char * oldpath,const char * newpath);
函数说明
rename()会将参数oldpath 所指定的文件名称改为参数newpath所指的文件名称。若newpath所指定的文件已存在,则会被删除。
返回值
执行成功则返回0,失败返回-1,错误原因存于errno
范例
/* 设计一个DOS下的rename指令rename 旧文件名新文件名*/
#include
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(重设读取目录的位置为开头位置)
相关函数
open,opendir,closedir,telldir,seekdir,readdir,scandir
表头文件
#include
#include
定义函数
void rewinddir(DIR *dir);
函数说明
rewinddir()用来设置参数dir 目录流目前的读取位置为原来开头的读取位置。
返回值
错误代码
EBADF dir为无效的目录流
范例
#include
#include
#include
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);
}