C語言getcwd()函數:取得當前的工作目錄
標頭檔:
定義函數:
char * getcwd(char * buf, size_t size);
函數說明:getcwd()會將當前的工作目錄絕對路徑複製到參數buf 所指的記憶體空間,參數size 為buf 的空間大小。
註:
1、在調用此函數時,buf 所指的記憶體空間要足夠大。若工作目錄絕對路徑的字串長度超過參數size 大小,則返回NULL,errno 的值則為ERANGE。
2、倘若參數buf 為NULL,getcwd()會依參數size 的大小自動設定記憶體(使用malloc()),如果參數size 也為0,則getcwd()會依工作目錄絕對路徑的字串程度來決定所配置的記憶體大小,進程可以在使用完次字串後利用free()來釋放此空間。
傳回值:執行成功則將結果複製到參數buf 所指的記憶體空間, 或是返回自動設定的字串指標. 失敗返回NULL,錯誤碼存於errno.
範例
#include <unistd.h>main(){ char buf[80]; getcwd(buf, sizeof(buf)); printf("current working directory : %s\n", buf);}
執行:
current working directory :/tmp
C語言chdir()函數:改變當前的工作目錄
標頭檔:
定義函數:
int chdir(const char * path);
函數說明:chdir()用來將當前的工作目錄改變成以參數path 所指的目錄.
傳回值執:行成功則返回0, 失敗返回-1, errno 為錯誤碼.
範例
#include <unistd.h>main(){ chdir("/tmp"); printf("current working directory: %s\n", getcwd(NULL, NULL));}
執行:
current working directory :/tmp
C語言chroot()函數:改變檔案根目錄
標頭檔:
定義函數:
int chroot(const char * path);
函數說明:chroot()用來改變根目錄為參數path 所指定的目錄。只有超級使用者才允許改變根目錄,子進程將繼承新的根目錄。
傳回值:調用成功則返回0, 失敗則返-1, 錯誤碼存於errno.
錯誤碼:
1、EPERM 許可權不足, 無法改變根目錄。
2、EFAULT 參數path 指標超出可存取記憶體空間。
3、ENAMETOOLONG 參數path 太長。
4、ENOTDIR 路徑中的目錄存在但卻非真正的目錄。
5、EACCESS 存取目錄時被拒絕。
6、ENOMEM 核心記憶體不足。
7、ELOOP 參數path 有過多符號串連問題。
8、EIO I/O 存取錯誤。
範例
/* 將根目錄改為/tmp, 並將工作目錄切換至/tmp */#include <unistd.h>main(){ chroot("/tmp"); chdir("/");}