Linux C/C++程式設計:使用libhv獲取當前程序的執行路徑
阿新 • • 發佈:2021-01-09
技術標籤:# C++
準備: https://blog.csdn.net/zhizhengguan/article/details/111678847
cmake_minimum_required(VERSION 3.16)
project(libuv_test C)
set(CMAKE_C_STANDARD 99)
link_directories(usr/local/lib)
include_directories(usr/local/include)
add_executable(${PROJECT_NAME} main.c)
target_link_libraries (${PROJECT_NAME} -luv ) #libuv.a
#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <uv.h>
char exepath[FILENAME_MAX + 1];
void get_netdata_execution_path(void)
{
int ret;
size_t exepath_size = 0;
struct passwd *passwd = NULL;
char *user = NULL;
passwd = getpwuid(getuid());
user = (passwd && passwd->pw_name) ? passwd->pw_name : "";
exepath_size = sizeof(exepath) - 1;
ret = uv_exepath(exepath, &exepath_size);
if (0 != ret) {
printf("[error]: \t\tuv_exepath(\"%s\", %u) (user: %s) failed (%s)." , exepath, (unsigned)exepath_size, user,
uv_strerror(ret));
printf("[fatal]: \t\tCannot start netdata without getting execution path.");
}
exepath[exepath_size] = '\0';
}
int main()
{
get_netdata_execution_path();
printf("%s", exepath);
}
理論
錯誤處理
- 初始化函式或者同步執行的函式,會在執行失敗後返回代表錯誤的負數。
- 對於非同步執行的函式,會在執行失敗的時候,給它們的回撥函式傳遞一個狀態引數。錯誤資訊被定義為UV_E* 常量, 你可以使用
uv_strerror(int)
和uv_err_name(int)
分別獲取const char *格式的錯誤資訊和錯誤名字。