os
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
使用当前的执行路径(即PATH
Unix和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),字符串VarName和Value可含有与编码点> 255个字符。
getenv(VarName, DefaultValue) -> Value
类型
返回Value
环境变量VarName
,或者DefaultValue
环境变量未定义。
如果文件名的Unicode编码是有效(见erlmanual page),字符串VarName和Value可含有与编码点> 255个字符。
getpid() -> Value
类型
以OS环境最常用的格式返回当前Erlang仿真器的进程标识符。返回Value
为包含进程的(通常)数字标识符的字符串。在Unix上,这通常是getpid()
系统调用的返回值。在Windows上,使用由GetCurrentProcessId()
系统调用返回的进程标识。
putenv(VarName, Value) -> true
类型
Value
为环境变量设置一个新的VarName
。
如果文件名的Unicode编码是有效(见erlmanual page),字符串VarName和Value可含有与编码点> 255个字符。
在Unix平台上,如果Unicode文件名翻译有效,则使用UTF-8编码设置环境。在Windows上,使用宽字符界面设置环境。
set_signal(Signal, Option) -> ok
类型
启用或禁用OS信号。
每个信号都可以设置为以下选项之一:
ignore
这个信号将被忽略。 default
该信号将使用操作系统的默认信号处理程序。 handle
这个信号会erl_signal_server
在Erlang运行时系统收到时通知。
system_time() -> integer()
返回当前的OS system time
在native
time unit
。
注
这一次不是
一个单调增加的时间。
system_time(Unit) -> integer()
类型
返回OS system time
转换为Unit
传递参数的当前值。
调用os:system_time(Unit)
相当于erlang:convert_time_unit
(os:system_time(), native, Unit)
。
注
这次是不
单调增加的时间。
timestamp() -> Timestamp
类型
Timestamp = {MegaSecs, Secs, MicroSecs}
OS system time
以与格式相同的格式返回当前格式erlang:timestamp/0
。该元组可以与函数一起使用calendar:now_to_universal_time/1
或calendar: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上,Osname
与uname -s
返回值具有相同的值,但采用小写。例如,在Solaris 1和2上,它是sunos
。
在Windows上,Osname
是nt
。
注
在使用此功能之前请仔细考虑。filename
如果您想以便携方式检查或创建文件名,请使用模块。避免在原子上匹配Osname
。
unsetenv(VarName) -> true
类型
删除环境变量VarName
。
如果Unicode文件编码有效(请参阅erlmanual page),则该字符串VarName可以包含代码点> 255的字符。
version() -> VersionString | {Major, Minor, Release}
类型
返回操作系统版本。在大多数系统中,此函数返回一个元组,但如果系统的版本不能表示为三个数字,则会返回一个字符串。
注
在使用此功能之前请仔细考虑。如果您仍然需要使用它,请始终使用它call os:type()
。