Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363746
  • 博文数量: 84
  • 博客积分: 1970
  • 博客等级: 上尉
  • 技术积分: 970
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-13 20:42
文章分类
文章存档

2011年(1)

2010年(4)

2009年(29)

2008年(50)

我的朋友

分类: C/C++

2008-09-08 19:58:52

在GNU查到他的用法是
char * realpath (const char *restrict name, char *restrict resolved)
目前知道若把第二個參數設為NULL即可得到第一個參數的絕對路徑
第二個參數為用來存放解開後全路徑檔名的空間. 用法:

char resolved_name[PATH_MAX];

char* s = realpath(filename,resolved_name);

正確執行後, s指向resolved_name, 也就是解得的全路徑檔名, 否則s值為NULL.

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;  

阅读(1105) | 评论(0) | 转发(0) |
0

上一篇:c函数:getcwd

下一篇:c函数:strncpy

给主人留下些什么吧!~~