#头文件
#include "co/os.h"
API 在命名空间 os,无需 flag::parse。
#环境变量
co::string os::env(const char* name);
bool os::env(const char* name, const char* value);
env(name):获取环境变量值,不存在返回空字符串。env(name, value):设置环境变量值,value为nullptr或空字符串时删除该变量,成功返回true。- 值不做 UTF-8 转码。
#路径
co::string os::homedir(); // 当前用户 home 目录
co::string os::cwd(); // 当前工作目录
co::string os::exepath(); // 可执行文件路径
co::string os::exedir(); // 可执行文件所在目录
co::string os::exename(); // 可执行文件名
- 失败返回空字符串。
- Windows 上返回 UTF-8,与
fs一致。 exename()含扩展名。
#进程与硬件
int os::pid();
int os::cpunum();
size_t os::pagesize();
pid():当前进程 id。cpunum():逻辑 CPU 核数。pagesize():页大小(字节)。
#信号
typedef void (*sig_handler_t)(int);
sig_handler_t os::signal(int sig, sig_handler_t handler, int flag=0);
- 只是
::signal的简单包装。 - 返回旧的处理函数。
- Windows 上不支持
flag。
#执行命令
bool os::system(const char* cmd);
- 无
std::string重载,需先.c_str()。 - 非 Windows 基于
popen/pclose,输出直接到终端。 - 返回
bool,表示命令是否执行成功。
#示例
#include "co/os.h"
#include "co/print.h"
int main() {
co::println("homedir = ", os::homedir());
co::println("cwd = ", os::cwd());
co::println("exepath = ", os::exepath());
co::println("pid = ", os::pid());
co::println("cpunum = ", os::cpunum());
co::println("page = ", os::pagesize());
co::println("PATH = ", os::env("PATH"));
os::env("MY_VAR", "hello");
co::println("MY_VAR = ", os::env("MY_VAR"));
os::env("MY_VAR", nullptr);
os::system("echo hello coost");
return 0;
}