C語言symlink()函數:建立文件符號連接
頭文件:
1
|
#include <unistd.h> |
定義函數:
1
|
int symlink( const char * oldpath, const char * newpath); |
函數說明:symlink()以參數newpath 指定的名稱來建立一個新的連接(符號連接)到參數oldpath 所指定的已存在文件. 參數oldpath 指定的文件不一定要存在, 如果參數newpath 指定的名稱為一已存在的文件則不會建立連接.
返回值:成功則返回0, 失敗返回-1, 錯誤原因存于errno.
錯誤代碼:
1、EPERM 參數oldpath 與newpath 所指的文件系統不支持符號連接。
2、EROFS 欲測試寫入權限的文件存在于只讀文件系統內。
3、EFAULT 參數oldpath 或newpath 指針超出可存取內存空間。
4、ENAMETOOLONG 參數oldpath 或newpath 太長。
5、ENOMEM 核心內存不足。
6、EEXIST 參數newpath 所指的文件名已存在。
7、EMLINK 參數oldpath 所指的文件已達到最大連接數目。
8、ELOOP 參數pathname 有過多符號連接問題。
9、ENOSPC 文件系統的剩余空間不足。
10、EIO I/O 存取錯誤。
范例
1
2
3
4
5
|
#include <unistd.h> main() { symlink( "/etc/passwd" , "pass" ); } |
C語言readlink()函數:取得符號連接所指的文件
頭文件:
1
|
#include <unistd.h> |
定義函數:
1
|
int readlink( const char * path, char * buf, size_t bufsiz); |
函數說明:readlink()會將參數path 的符號連接內容存到參數buf 所指的內存空間, 返回的內容不是以NULL作字符串結尾, 但會將字符串的字符數返回. 若參數bufsiz 小于符號連接的內容長度, 過長的內容會被截斷.
返回值:執行成功則傳符號連接所指的文件路徑字符串, 失敗則返回-1, 錯誤代碼存于errno.
錯誤代碼:
1、EACCESS 取文件時被拒絕, 權限不夠。
2、EINVAL 參數bufsiz 為負數。
3、EIO I/O 存取錯誤。
4、ELOOP 欲打開的文件有過多符號連接問題。
5、ENAMETOOLONG 參數path 的路徑名稱太長。
6、ENOENT 參數path 所指定的文件不存在。
7、ENOMEM 核心內存不足。
8、ENOTDIR 參數path 路徑中的目錄存在但卻非真正的目錄。