在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;
}
阅读(1149) | 评论(0) | 转发(0) |