- 功能簡述:?將路徑轉為絕對路徑。
- 函數原型:?char * realpath (const char *restrict name, char *restrict resolved)
○ name:原始路徑。
○ resolved:存放規范化路徑的地址。可以為 null。
○ 返回值:正常情況和resolved是同一個指針。 - 頭文件:?stdlib.h
將參數path所指的相對路徑轉換成絕對路徑后存于參數resolved_path所指的字符串數組或指針中
如果resolved_path為NULL,則該函數調用malloc分配一塊大小為PATH_MAX的內存來存放解析出來的絕對路徑,并返回指向這塊區域的指針。程序員應調用free來手動釋放這塊內存。
示例:
#include <stdio.h>
#include <stdlib.h>void retAbsPath(const char * path,char* absPath)
{realpath(path,absPath);
}int main()
{//第一種用法char *path = "./";char absPath[256];retAbsPath(path,absPath);printf("path = %s\n",path);printf("absPath = %s\n", absPath);//第二種用法char* ret = realpath(path,NULL);printf("path = %s\n",path);printf("ret = %s\n",ret);//使用第二種方法記得釋放realpath分配的內存free(ret);return 0;
}
?輸出:
path = ./
absPath = /home/projects/protectFile
path = ./
ret = /home/projects/protectFile
注意事項:
函數第二個參數resolved 參數可以為 null。當它為 null 時等同于函數canonicalize_file_name
,返回值指向函數內動態申請的內存空間,所以要記得 free,建議使用第二種用法而不是第一種。
事實上,我的代碼中第一種用法absPath很有可能會越界,如果傳入的第二參數 resolved 非 null 指針,一定要保證有足夠的空間存放格式化的地址,可以使用PATH_MAX宏。
Linux/Unix 系統會在limits.h
頭文件中定義PATH_MAX
宏,表示路徑名的最大長度。
但是有的系統可能會沒有這個定義,所以還是建議使用第二種用法