当前位置--> 首 页 --> 文 章 -->Linux Develop
|
|
※阅读文章※ |
Linux程式设计-12.目录操作作者:不祥 [文章出自: www.fanqiang.com] Linux下的目录是依照标准来实作的,因此,您可以毫无问题地移殖到任何其它UNIX平台。 -------------------------------------------------------------------------------- getcwd/getwd : 取得目前所在目录 -------------------------------------------------------------------------------- #include char * getcwd(char *buf,size_t size); buf将会返回目前路径名称。 任何的错误发生,将会返回NULL。如果路径长度超过size,errno为ERANGE。getcwd返回的值永远是没有symbol link的。 -------------------------------------------------------------------------------- #include char *getwd(char *buf); getwd是个危险的函数,一般都会强烈建议不要用,因为您无法确定最长的目录长度为多少。PATH_MAX定义了最长的路径长度。在Linux下所以提供这个函数主要是因为「传统」。 -------------------------------------------------------------------------------- chdir/fchdir/chroot : 改变目前所在目录 -------------------------------------------------------------------------------- #include int chdir(const char * pathname); int fchdir(int fd); chdir根据pathname变更目前的所在目录,它只改变该程式的所在目录。 fchdir根据已开启的fd(file descriptor)目录来变更。 -------------------------------------------------------------------------------- #include int chroot(const char * path); chroot改变该程式的根目录所在。例如chroot("/home/ftp")会将根目录换到/home/ftp下,而所有档案操作都不会超出这个围内。为保障安全性,当chdir("/..")时,将会仅切换到chdir("/"),如此便不会有档案安全问题。 -------------------------------------------------------------------------------- mkdir/rmdir : 造/移除目录 -------------------------------------------------------------------------------- #include #include int mkdir(const char * dirname,mode_t mode); mkdir会造一个新目录出来,例如mkdir("/home/foxman",0755);。 如果该目录或档案已经存在,则操作失败。 -------------------------------------------------------------------------------- #include int rmdir(char * pathname); 这个函数移除pathname目录。 -------------------------------------------------------------------------------- opendir/readdir/closedir/rewinddir : 读取目录资讯 -------------------------------------------------------------------------------- #include DIR * opendir(const char * pathname); int closedir(DIR *dir); struct dirent * readdir(DIR *dir); int rewinddir(DIR *dir); struct dirent { long d_ino; /* inode number */ off_t d_off; /* offset to this dirent */ unsigned short d_reclen; /* length of this d_name */ char d_name [NAME_MAX+1]; /* file name (null-terminated) */ }; opendir开启一个目录操作DIR,closedir关闭之。 readdir则循序读取目录中的资讯,rewinddir则可重新读取目录资讯。 以下是个标准例。 -------------------------------------------------------------------------------- #include #include char ** dirGetInfo(const char *pathname) { char ** filenames; DIR * dir; struct dirent * ent; int n = 0; filenames = (char **)malloc(sizeof(char*)); filenames[0]=NULL; dir = opendir(pathname); if (!dir) return filenames; while ((ent = readdir(dir))) { filenames = (char**)realloc(filenames,sizeof(char*)*(n+1)); filenames[n] = strdup(ent->d_name); n++; } closedir(dir); filenames = (char **)realloc(filenames,sizeof(char*)*(n+1)); filenames[n] = NULL; return filenames; } 文章加入时间: 2004-11-17 14:56:33 责任编辑: w9 (3089 人次查阅) |