• windows和linux下获取当前程序路径以及cpu数


    [cpp] view plaincopy
     
    1. #ifdef WIN32  
    2. #include <Windows.h>  
    3. #else  
    4. #include <stdio.h>  
    5. #include <unistd.h>  
    6. #endif  
    7.   
    8. #include <assert.h>  
    9.   
    10.     std::string getCurrentAppPath()  
    11.     {  
    12. #ifdef WIN32  
    13.         char path[MAX_PATH + 1] = {0};  
    14.         if (GetModuleFileName(NULL, path, MAX_PATH) != 0)  
    15.             return std::string(path);  
    16. #else  
    17.         char path[256] = {0};  
    18.         char filepath[256] = {0};  
    19.         char cmd[256] = {0};  
    20.         FILE* fp = NULL;  
    21.   
    22.         // 设置进程所在proc路径  
    23.         sprintf(filepath, "/proc/%d", getpid());  
    24.         // 将当前路径设为进程路径  
    25.         if(chdir(filepath) != -1)  
    26.         {  
    27.             //指定待执行的shell 命令  
    28.             snprintf(cmd, 256, "ls -l | grep exe | awk '{print $10}'");  
    29.             if((fp = popen(cmd,"r")) == NULL)  
    30.             {  
    31.                 return std::string();  
    32.             }  
    33.             //读取shell命令执行结果到字符串path中  
    34.             if (fgets(path, sizeof(path)/sizeof(path[0]), fp) == NULL)  
    35.             {  
    36.                 pclose(fp);  
    37.                 return std::string();  
    38.             }  
    39.   
    40.             //popen开启的fd必须要pclose关闭  
    41.             pclose(fp);  
    42.             return std::string(path);  
    43.         }  
    44. #endif  
    45.         return std::string();  
    46.     }  
    47.   
    48.     std::size_t getCpuCount()  
    49.     {  
    50. #ifdef WIN32  
    51.         SYSTEM_INFO sysInfo;  
    52.         GetSystemInfo(&sysInfo);  
    53.         return sysInfo.dwNumberOfProcessors;  
    54. #else  
    55.         long cpu_num = sysconf(_SC_NPROCESSORS_ONLN);  
    56.         if (cpu_num == -1)  
    57.         {  
    58.             assert(false);  
    59.             return 0;  
    60.         }  
    61.         // 看两者是否相等  
    62.         assert(cpu_num == sysconf(_SC_NPROCESSORS_CONF));  
    63.         return cpu_num;  
    64. #endif  
    65.     }  
  • 相关阅读:
    VM VirtualBox安装Centos6.5
    桥接
    程序员工作心法
    策略模式-鸭子怎么飞-实例
    策略模式-用什么方式去上班呢 实例
    观察者模式-订报纸,语音呼叫系统实例
    门面(Facade)模式--医院,保安系统实例
    Promise实例的resolve方法
    Promise实例的any方法
    Promise实例的race方法
  • 原文地址:https://www.cnblogs.com/lidabo/p/4245437.html
Copyright © 2020-2023  润新知