Linux C -> symlink 和 readlink -> 符號鏈接
Linux C -> symlink 和 readlink -> 符號鏈接
---------------------------------------------------------------------------------------------
symlink() 函數創建符號連接。
概要 POSIX
#include <unistd.h>
int symlink(const char *path1, const char *path2);
symlink("/root/b.out","/root/c.out");
如果成功, symlink返回0.。否則返回-1並設置errno。
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
查看鏈接所指向的文件的名字
---------------------------------------------------------------------------------------------
int main()
{
char buf[100];
readlink("/root/c.out",buf,sizeof(buf));
printf("%s",buf);
return 0;
}
---------------------------------------------------------------------------------------------
相關函數: stat, lstat, symlink
表頭文件: #include <unistd.h>
定義函數:ssize_t readlink(const char *path, char *buf, size_t bufsiz);
函數說明:readlink()會將參數path的符號鏈接內容存儲到參數buf所指的內存空間,返回的內容不是以\000作字符串結尾,但會將字符串的字符數返回,這使得添加\000變得簡單。若參數bufsiz小於符號連接的內容長度,過長的內容會被截斷,如果 readlink 第一個參數指向一個文件而不是符號鏈接時,readlink 設 置errno 為 EINVAL 並返回 -1。 readlink()函數組合了open()、read()和close()的所有操作。
返回值 :執行成功則返回字符串的字符數,失敗返回-1, 錯誤代碼存於errno
執行成功則返回ssize_t
錯誤代碼:
EACCESS 取文件時被拒絕,權限不夠
EINVAL 參數bufsiz為負數
EIO O存取錯誤
ELOOP 欲打開的文件有過多符號連接問題
ENAMETOOLONG 參數path的路徑名稱太長
ENOENT 參數path所指定的文件不存在
ENOMEM 核心內存不足
ENOTDIR 參數path路徑中的目錄存在但卻非真正的目錄
Linux C -> symlink 和 readlink -> 符號鏈接