關於apue第二章獲取絕對路徑長度程式path_alloc()分析
#include "apue.h"
#include
#include
#ifdef PATH_MAX
static int pathmax = PATH_MAX; //假如limits.h中定義了PATH_MAX,就直接取limits.h定義的值
#else
static int pathmax = 0;
//如果limits.h並未定義PATH_MAX,暫且給定0,在後面會計算出這個變數的值
#endif
#define SUSV3 200112L
static long posix_version = 0;
/* If PATH_MAX is indeterminate, no guarantee this is adequate */
#define PATH_MAX_GUESS 1024
char *
path_alloc(int *sizep) /* also return allocated size, if nonnull */
{
char
*ptr;
int
size;
if (posix_version == 0)
posix_version = sysconf(_SC_VERSION);
//獲取posix標準版本號
if (pathmax == 0) {/* first time through */ //如果在limits.h中未定義PATH_MAX
errno = 0; //將錯誤號置0
if ((pathmax = pathconf("/", _PC_PATH_MAX)) < 0) { //假定當前工作目錄是 / ,獲取相對於 / 的相對地址長度,也就相當是絕對地址的長度,當返回值小於0時,可能有下面兩種情況
if (errno == 0)
pathmax = PATH_MAX_GUESS;/* it's indeterminate */
//當錯誤號依舊為0,也就是pathconf()併為發生錯誤,這種狀態下,我們認定PATH_MAX為不確定的,我們只能猜測某個值,這裡猜測為1024
else
err_sys("pathconf error for _PC_PATH_MAX");//錯誤號不為0時,pathconf()執行出錯
} else {
pathmax++;/* add one since it's relative to root */ //當pathconf()返回>0的值時,認為PATH_MAX為執行時的限制值,故絕對地址是相對地址加上/的長度,也就是+1
}
}
if (posix_version < SUSV3)
size = pathmax + 1; //當posix版本小於上述值時,絕對路徑末尾要加上null
else
size = pathmax; //以後的版本不需要在路徑末尾加上null
if ((ptr = malloc(size)) == NULL)
err_sys("malloc error for pathname");
if (sizep != NULL)
*sizep = size;
return(ptr);
}
疑問:當limits.h中定義了PATH_MAX的時候,為什麼可以直接將這個長度作為絕對路徑的長度,PATH_MAX不是指相對路徑名的最大位元組數嗎,在fedora10系統中,PATH_MAX = 4096,在apue P104頁中,為何getcwd(ptr,size)
size的值被賦予4096呢,假如/ 後面跟有4096個位元組的相對路徑地址呢,那不是有4097個位元組,那不是不夠空間去分配,linux系統中是否對絕對路徑的最大位元組數有限定呢?
可能解答:絕對路徑的最大位元組數也不能超過PATH_MAX; 有待證實
pathmax = pathconf("/", _PC_PATH_MAX)) < 0) 是求的相對於/的相對路徑的最大長度嗎?
如果是的話,那樣就是不管怎麼樣,所求出來的長度正好是當前路徑的長度。/ + 相對路徑 = 絕對路徑
相關文章
- svg獲取路徑的長度SVG
- JavaScript 獲取目錄絕對路徑JavaScript
- 獲取絕對路徑 【檔案找不到】
- linux下獲取程式當前目錄絕對路徑Linux
- 關於函式由絕對路徑轉為相對路徑函式
- PHP取url絕對路徑PHP
- js獲取當前目錄的絕對路徑程式碼例項JS
- JavaScript中獲取當前專案的絕對路徑JavaScript
- python獲取指定目錄所有檔案絕對路徑Python
- 怎樣獲取Torque.properties檔案的絕對路徑?
- Linux Shell獲取正在執行指令碼的絕對路徑Linux指令碼
- 將APP加入系統分享+根據Uri獲取絕對路徑APP
- HTML絕對路徑與相對路徑HTML
- Java中的獲取檔案的物理絕對路徑,和讀取檔案Java
- 獲取絕對路徑下的檔名和檔案字尾方法
- 檔案絕對路徑和相對路徑
- Jsp相對路徑和絕對路徑JS
- 相對路徑轉換為絕對路徑的程式碼例項
- 深入解析Java絕對路徑與相對路徑Java
- 絕對路徑和相對路徑的區別,
- javascript將相對路徑修改為絕對路徑JavaScript
- 絕對路徑和相對路徑的區別
- Qt的相對路徑轉為絕對路徑QT
- vue cli 關於使用絕對路徑引用圖片的問題Vue
- PHP 常用獲取路徑程式碼PHP
- 檔案的相對路徑和絕對路徑以及根相對路徑
- 05_Linux相對路徑和絕對路徑Linux
- 好程式設計師分享html圖片絕對路徑改相對路徑程式設計師HTML
- html中的路徑的介紹:絕對路徑和相對路徑HTML
- Linux檔案的路徑定位-相對路徑和絕對路徑Linux
- JSP取得絕對路徑JS
- 獲取微信小程式頁面路徑微信小程式
- Linux檢視程式檔案絕對路徑Linux
- 關於path_alloc()函式函式
- 好程式設計師web前端分享絕對路徑與相對路徑的引用程式設計師Web前端
- nodejs路徑處理方法和絕對路徑NodeJS
- python如何將相對路徑轉換為絕對路徑?Python
- web專案絕對路徑與相對路徑的問題Web