1. 程式人生 > 其它 >Linux C/C++程式設計:使用libhv獲取當前程序的執行路徑

Linux C/C++程式設計:使用libhv獲取當前程序的執行路徑

技術標籤:# 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 *格式的錯誤資訊和錯誤名字。