首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux 下獲取進程完整路徑:/proc 文件系統實戰

     編輯:關於C語言

核心原理

Linux 將進程信息暴露在虛擬文件系統 /proc 中。每個進程對應目錄 /proc//,其中 cmdline 文件存儲完整命令行參數,參數間以 \0 分隔。

C++ 實現代碼

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

int main(int argc, char *argv[]) {
    if (argc != 2) {
        std::cerr << "用法: " << argv[0] << " \n";
        return EXIT_FAILURE;
    }

    std::string path = "/proc/" + std::string(argv[1]) + "/cmdline";
    std::ifstream fin(path);
    if (!fin) {
        std::cerr << "無法打開 " << path << '\n';
        return EXIT_FAILURE;
    }

    std::string token;
    // 以 '\0' 為分隔符逐個讀取參數
    while (std::getline(fin, token, '\0')) {
        if (!token.empty())
            std::cout << token << '\n';
    }
    return EXIT_SUCCESS;
}

關鍵點解析

  • std::getline(fin, token, '\0'):利用第三個參數指定分隔符為空字符,完美匹配 cmdline 格式。
  • 輸出結果中第一個 token 通常為可執行文件路徑(絕對路徑或相對路徑),後續為參數。
  • 若需獲取當前進程路徑,可讀取符號鏈接 /proc/self/exe:
    char buf[PATH_MAX]; readlink("/proc/self/exe", buf, sizeof(buf));

跨平台提示

此方法僅限 Linux。Windows 需用 GetModuleFileNameEx,macOS/BSD 用 proc_pidpath 或 _NSGetExecutablePath。跨平台庫(如 Boost.Process、libuv)已封裝好差異。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved