非常教程

Erlang 20参考手册

核心 | kernel

os

模块

OS

模块摘要

操作系统特有的功能。

描述

该模块中的功能是特定于操作系统的。不小心使用这些功能会导致只能在特定平台上运行的程序。另一方面,仔细使用这些函数可以帮助程序在大多数平台上运行。

出口

cmd(Command) -> string()

类型

Command在目标OS的命令shell中执行,捕获该命令的标准输出,并将该结果作为字符串返回。该功能是前一个功能的替代unix:cmd/1; 它们在Unix平台上相当。

例子:

LsOut = os:cmd("ls"), % on unix platform
DirOut = os:cmd("dir"), % on Win32 platform

请注意,在某些情况下,从另一个程序(例如os:cmd/1)调用的命令的标准输出可能与直接从OS命令shell调用时的命令的标准输出相比有所不同。

find_executable(Name) -> Filename | false

find_executable(Name, Path) -> Filename | false

类型

这两个函数以与底层操作系统相同的方式查找具有指定名称和搜索路径的可执行程序。find_executable/1使用当前的执行路径(即PATHUnix和Windows上的环境变量)。

Path如果指定,则符合OS上执行路径的语法。返回可执行程序的绝对文件名Name,或者false未找到该程序。

getenv() -> string()

返回所有环境变量的列表。每个环境变量都表示为格式中的单个字符串"VarName=Value",其中VarName是变量的名称Value及其值。

如果Unicode文件编码有效(请参阅erlmanual page),则字符串可以包含代码点> 255的字符。

getenv(VarName) -> Value | false

类型

返回Value环境变量VarName,或者false环境变量未定义。

如果文件名的Unicode编码是有效(见erlmanual page),字符串VarNameValue可含有与编码点> 255个字符。

getenv(VarName, DefaultValue) -> Value

类型

返回Value环境变量VarName,或者DefaultValue环境变量未定义。

如果文件名的Unicode编码是有效(见erlmanual page),字符串VarNameValue可含有与编码点> 255个字符。

getpid() -> Value

类型

以OS环境最常用的格式返回当前Erlang仿真器的进程标识符。返回Value为包含进程的(通常)数字标识符的字符串。在Unix上,这通常是getpid()系统调用的返回值。在Windows上,使用由GetCurrentProcessId()系统调用返回的进程标识。

putenv(VarName, Value) -> true

类型

Value为环境变量设置一个新的VarName

如果文件名的Unicode编码是有效(见erlmanual page),字符串VarNameValue可含有与编码点> 255个字符。

在Unix平台上,如果Unicode文件名翻译有效,则使用UTF-8编码设置环境。在Windows上,使用宽字符界面设置环境。

set_signal(Signal, Option) -> ok

类型

启用或禁用OS信号。

每个信号都可以设置为以下选项之一:

ignore 这个信号将被忽略。 default 该信号将使用操作系统的默认信号处理程序。 handle 这个信号会erl_signal_server在Erlang运行时系统收到时通知。

system_time() -> integer()

返回当前的OS system timenative time unit

这一次不是一个单调增加的时间。

system_time(Unit) -> integer()

类型

返回OS system time转换为Unit传递参数的当前值。

调用os:system_time(Unit)相当于erlang:convert_time_unitos:system_time(), native, Unit)

这次是单调增加的时间。

timestamp() -> Timestamp

类型

Timestamp = {MegaSecs, Secs, MicroSecs}

OS system time以与格式相同的格式返回当前格式erlang:timestamp/0。该元组可以与函数一起使用calendar:now_to_universal_time/1calendar:now_to_local_time/1获取日历时间。使用日历时间以及MicroSecs此函数的返回元组的部分,可以让您以高分辨率记录时间戳,并与OS余下时间保持一致。

格式化格式为“DD Mon YYYY HH:MM:SS.mmmmmm”的字符串格式示例,其中DD是月份的日期,Mon是文本月份名称,YYYY是年份,HH:MM:SS是时间, mmmmmm是六个位置的微秒数:

-module(print_time).
-export([format_utc_timestamp/0]).
format_utc_timestamp() ->
    TS = {_,_,Micro} = os:timestamp(),
    {{Year,Month,Day},{Hour,Minute,Second}} =
calendar:now_to_universal_time(TS),
    Mstr = element(Month,{"Jan","Feb","Mar","Apr","May","Jun","Jul",
    "Aug","Sep","Oct","Nov","Dec"}),
    io_lib:format("~2w ~s ~4w ~2w:~2..0w:~2..0w.~6..0w",
    [Day,Mstr,Year,Hour,Minute,Second,Micro]).

该模块可用于以下几个方面:

1> io:format("~s~n",[print_time:format_utc_timestamp()]).
29 Apr 2009  9:55:30.051711

OS系统时间也可以通过system_time/0和进行检索system_time/1

perf_counter() -> Counter

类型

返回当前的性能计数器值perf_counter time unit。这是一个高度优化的调用,可能无法追踪。

perf_counter(Unit) -> integer()

类型

返回可用作非常快速和高分辨率时间戳的性能计数器。该计数器可以直接从硬件或操作系统中读取,并具有相同的保证。这意味着连续两次调用函数并不保证是单调的,尽管它很可能会是单调的。性能计数器将转换为作为参数传递的分辨率。

1> T1 = os:perf_counter(1000),receive after 10000 -> ok end,T2 = os:perf_counter(1000).
176525861
2> T2 - T1.
10004

type() -> {Osfamily, Osname}

类型

返回Osfamily并在某些情况下,Osname当前的操作系统。

在Unix上,Osnameuname -s返回值具有相同的值,但采用小写。例如,在Solaris 1和2上,它是sunos

在Windows上,Osnament

在使用此功能之前请仔细考虑。filename如果您想以便携方式检查或创建文件名,请使用模块。避免在原子上匹配Osname

unsetenv(VarName) -> true

类型

删除环境变量VarName

如果Unicode文件编码有效(请参阅erlmanual page),则该字符串VarName可以包含代码点> 255的字符。

version() -> VersionString | {Major, Minor, Release}

类型

返回操作系统版本。在大多数系统中,此函数返回一个元组,但如果系统的版本不能表示为三个数字,则会返回一个字符串。

在使用此功能之前请仔细考虑。如果您仍然需要使用它,请始终使用它call os:type()

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1