当前位置--> 首 页 --> 文 章 -->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 人次查阅)
 
Copyright © 1998-2004 中国PHP联盟 All rights reserved.