linux關於readlink函式獲取執行路徑的小程式
相關函式: stat, lstat, symlink
表標頭檔案: #include <unistd.h>
定義函式:int readlink(const char *path, char *buf, size_t bufsiz);
函式說明:readlink()會將引數path的符號連線內容到引數buf所指的記憶體空間,返回的內容不是以NULL作字串結尾,但會將字串的字元數返回。若引數bufsiz小於符號連線的內容長度,過長的內容會被截斷
返回值 :執行成功則傳符號連線所指的檔案路徑字串,失敗返回-1, 錯誤程式碼存於errno
錯誤程式碼:
EACCESS 取檔案時被拒絕,許可權不夠
EINVAL 引數bufsiz為負數
EIO O存取錯誤
ELOOP 欲開啟的檔案有過多符號連線問題
ENAMETOOLONG 引數path的路徑名稱太長
ENOENT 引數path所指定的檔案不存在
ENOMEM 核心記憶體不足
ENOTDIR 引數path路徑中的目錄存在但卻非真正的目錄
例一:
#include <stdio.h>
#include <unistd.h>
#define PATH_MAX 1024
char * get_exe_path()
{
static char buf[PATH_MAX];
int i;
int rslt = readlink("/proc/self/exe", buf, PATH_MAX);
if (rslt < 0 || rslt >= PATH_MAX)
{
return NULL;
}
buf[rslt] = '\0';
for (i = rslt; i >= 0; i--)
{
printf("buf[%d] %c\n", i, buf[i]);
if (buf[i] == '/')
{
buf[i + 1] = '\0';
break;
}
}
return buf;
}
int main(int argc, char ** argv)
{
printf("%s\n", get_exe_path());
return 0;
}
例二:(個人感覺這個程式比較合理, 推薦)
#include <stdio.h>
#include <unistd.h>
char * get_exe_path( char * buf, int count)
{
int i;
int rslt = readlink("/proc/self/exe", buf, count - 1);
if (rslt < 0 || (rslt >= count - 1))
{
return NULL;
}
buf[rslt] = '\0';
for (i = rslt; i >= 0; i--)
{
printf("buf[%d] %c\n", i, buf[i]);
if (buf[i] == '/')
{
buf[i + 1] = '\0';
break;
}
}
return buf;
}
int main(int argc, char ** argv)
{
char path[1024];
printf("%s\n", get_exe_path(path, 1024));
return 0;
}
表標頭檔案: #include <unistd.h>
定義函式:int readlink(const char *path, char *buf, size_t bufsiz);
函式說明:readlink()會將引數path的符號連線內容到引數buf所指的記憶體空間,返回的內容不是以NULL作字串結尾,但會將字串的字元數返回。若引數bufsiz小於符號連線的內容長度,過長的內容會被截斷
返回值 :執行成功則傳符號連線所指的檔案路徑字串,失敗返回-1, 錯誤程式碼存於errno
錯誤程式碼:
EACCESS 取檔案時被拒絕,許可權不夠
EINVAL 引數bufsiz為負數
EIO O存取錯誤
ELOOP 欲開啟的檔案有過多符號連線問題
ENAMETOOLONG 引數path的路徑名稱太長
ENOENT 引數path所指定的檔案不存在
ENOMEM 核心記憶體不足
ENOTDIR 引數path路徑中的目錄存在但卻非真正的目錄
例一:
#include <stdio.h>
#include <unistd.h>
#define PATH_MAX 1024
char * get_exe_path()
{
static char buf[PATH_MAX];
int i;
int rslt = readlink("/proc/self/exe", buf, PATH_MAX);
if (rslt < 0 || rslt >= PATH_MAX)
{
return NULL;
}
buf[rslt] = '\0';
for (i = rslt; i >= 0; i--)
{
printf("buf[%d] %c\n", i, buf[i]);
if (buf[i] == '/')
{
buf[i + 1] = '\0';
break;
}
}
return buf;
}
int main(int argc, char ** argv)
{
printf("%s\n", get_exe_path());
return 0;
}
例二:(個人感覺這個程式比較合理, 推薦)
#include <stdio.h>
#include <unistd.h>
char * get_exe_path( char * buf, int count)
{
int i;
int rslt = readlink("/proc/self/exe", buf, count - 1);
if (rslt < 0 || (rslt >= count - 1))
{
return NULL;
}
buf[rslt] = '\0';
for (i = rslt; i >= 0; i--)
{
printf("buf[%d] %c\n", i, buf[i]);
if (buf[i] == '/')
{
buf[i + 1] = '\0';
break;
}
}
return buf;
}
int main(int argc, char ** argv)
{
char path[1024];
printf("%s\n", get_exe_path(path, 1024));
return 0;
}
相關文章
- golang獲取程式執行路徑Golang
- 圖片 縮略 和 水印 以及 C#獲取當前程式執行路徑的方法集合C#
- 利用雲函式來實現獲取特定路徑+引數的小程式碼函式
- 用JS獲取函式相關的程式碼JS函式
- 加快交易最有效途徑:簡化程式執行路徑WB
- 獲取微信小程式頁面路徑微信小程式
- 關於Oracle取整的函式Oracle函式
- 索引優化執行路徑兩例索引優化
- 通過 SHGetSpecialFolderLocation、SHGetPathFromIDList 函式獲取常用路徑函式
- 關於字串的功能函式小結字串函式
- 關於 Date 函式獲取各類時間/日期/天數函式
- 關於執行緒的幾個函式執行緒函式
- windows定時任務執行路徑問題Windows
- Linux Shell獲取正在執行指令碼的絕對路徑Linux指令碼
- C語言getgroups()函式:獲取組程式碼函式C語言函式
- 關於函式由絕對路徑轉為相對路徑函式
- python獲取程式執行檔案路徑的方法其一Python
- 關於linux下system()函式的總結Linux函式
- js獲取指定函式的形參程式碼例項JS函式
- PHP 常用獲取路徑程式碼PHP
- c# 獲取程式當前路徑C#
- C#獲取程式當前路徑的方法C#
- PostgreSQL 函式獲取表DDLSQL函式
- 視窗屬性的獲取函式函式
- 用前面建立的函式獲取物件函式物件
- linux下獲取程式當前目錄絕對路徑Linux
- 關於Class類與Classloader類的getResource方法獲取路徑的問題!
- Linux應用程式獲取執行緒棧的資訊Linux執行緒
- VSCode 更改預設Debug 執行路徑為程式碼所在目錄VSCode
- 小程式如何獲取code
- 關於apue第二章獲取絕對路徑長度程式path_alloc()分析
- PHP獲取小程式openid,10行程式碼快速獲取小程式openidPHP行程
- 關於執行緒插入函式如何用的問題執行緒函式
- C# 獲取專案程式路徑的方法C#
- 關於count函式的理解函式
- 關於lag函式的用法函式
- 微信小程式上傳多圖到伺服器並獲取返回的路徑微信小程式伺服器
- 微信小程式 - 輸入起點、終點獲取距離並且進行路線規劃(騰訊地圖)微信小程式地圖