*取得系统变量的最简单方法(Environ 函数)

Environ 函数

返回 String,它关连于一个操作系统环境变量。 在 Macintosh 中不可用

语法

Environ({envstring | number})

Environ 函数的语法含有以下这些命名参数:


部分 描述
envstring 可选参数。包含一个环境变量名的字符串表达式。
number 可选参数。数值表达式,用来表示环境字符串在环境字符串表格中的数值顺序。number 参数可以是任意的数值表达式,不过在计算前,它会先转换为一个整数。


说明

如果在环境字符串表格中找不到 envstring,则会返回一个零长度字符串 ("")。如果找到,则 Environ 会返回一段文本,文本是赋值给指定的 envstring 的,也就是说,在环境字符串表格中对应那个环境变量的等号 (=) 后面的那段文本。

如果指定了 number,则在环境字符串表格中相应位置上的字符串会返回。在这种情况下,Environ 会返回整个文本,包括 envstring。如果在指定位置上没有环境字符串,那么 Environ 会返回一个零长度字符串。

参数对照:(在本机测试结果如下)


number envstring
1 ALLUSERSPROFILE
2 APPDATA
3 CLIENTNAME
4 CommonProgramFiles
5 COMPUTERNAME
6 ComSpec
7 FP_NO_HOST_CHECK
8 HOMEDRIVE
9 HOMEPATH
10 LOGONSERVER
11 NUMBER_OF_PROCESSORS
12 OS
13 Path
14 PATHEXT
15 PROCESSOR_ARCHITECTURE
16 PROCESSOR_IDENTIFIER
17 PROCESSOR_LEVEL
18 PROCESSOR_REVISION
19 ProgramFiles
20 SESSIONNAME
21 SystemDrive
22 SystemRoot
23 TEMP
24 TMP
25 USERDOMAIN
26 USERNAME
27 USERPROFILE
28 windir

 

============================================================================

For i = 1 To 28
    Debug.Print Environ(i)
Next i


1 ALLUSERSPROFILE=C:\Documents and Settings\All Users
2 APPDATA=C:\Documents and Settings\Tnss\Application Data
3 CLIENTNAME=Console
4 CommonProgramFiles=C:\Program Files\Common Files
5 COMPUTERNAME=TNS
6 ComSpec=C:\WINDOWS\system32\cmd.exe
7 FP_NO_HOST_CHECK=NO
8 HOMEDRIVE=C:
9 HOMEPATH=\Documents and Settings\Tnss
10 LOGONSERVER=\\TNS
11 NUMBER_OF_PROCESSORS=1
12 OS=Windows_NT
13 Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
14 PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
15 PROCESSOR_ARCHITECTURE=x86
16 PROCESSOR_IDENTIFIER=x86 Family 15 Model 1 Stepping 2, GenuineIntel
17 PROCESSOR_LEVEL=15
18 PROCESSOR_REVISION=0102
19 ProgramFiles=C:\Program Files
20 SESSIONNAME=Console
21 SystemDrive=C:
22 SystemRoot=C:\WINDOWS
23 TEMP=C:\DOCUME~1\Tnss\LOCALS~1\Temp
24 TMP=C:\DOCUME~1\Tnss\LOCALS~1\Temp
25 USERDOMAIN=TNS
26 USERNAME=Tnss
27 USERPROFILE=C:\Documents and Settings\Tnss
28 windir=C:\WINDOWS

### 关于 `execv` 函数 `execv` 是 Unix-like 系统中的一个重要函数,属于 `exec` 家族的一部分。它的主要功能是用指定的新程序替换当前进程的映像,并允许传递参数列表给新程序[^4]。 #### 参数说明 `execv` 的原型如下: ```c int execv(const char *path, char *const argv[]); ``` - `path`: 新程序的绝对路径或相对路径。 - `argv`: 一个字符串数组,表示传递给新程序的命令行参数。最后一个元素必须为 `NULL`,用来标记参数列表的结束。 如果成功调用了 `execv`,则不会返回到原来的代码;因为当前进程已经被新的程序完全替换了。如果失败,则会返回 `-1` 并设置相应的错误码 (`errno`)。 --- ### 示例代码解析 以下是基于引用的内容提供的几个示例及其解释: #### 示例 1: 替代 `/bin/ls` 路径并执行 `ls -l /` ```cpp #include <iostream> #include <unistd.h> using namespace std; int main() { cout << "程序开始执行啦,成为进程" << endl; // 设置要传递给 ls 命令的参数 char* argv[5] = {"ls", "-l", "/", NULL}; // 使用 execv 执行 /bin/ls 命令 execv("/bin/ls", argv); // 如果到达这里,说明 execv 失败 int i = 0; for (i = 0; i < 100; i++) { cout << i << endl; } cout << "进程结束执行" << endl; } ``` 在这个例子中,`execv` 将当前进程替换为 `/bin/ls` 程序,并向其传递参数 `"ls"`、`"-l"` 和 `"/"`。如果没有发生错误,这段代码将在终端显示目录 `/` 下文件的详细信息[^1]。 --- #### 示例 2: 获取环境变量并通过子进程运行 `ls` ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> extern char **environ; int main(int argc, char *argv[], char *envp[]) { int i; for (i = 0; environ[i]; i++) { puts(environ[i]); } // 创建子进程 pid_t pid = fork(); if (pid == 0) { // 子进程中执行 char *args[] = {"ls", "-l", "/home", NULL}; execv("/bin/ls", args); } return 0; } ``` 此示例展示了如何结合 `fork()` 和 `execv()` 实现父子进程分离。父进程打印环境变量,而子进程通过 `execv` 执行 `ls -l /home` 命令[^3]。 --- #### 示例 3: 简单使用 `execv` ```c #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <errno.h> int main(void) { char *argv[] = {"ls", "-l", "/home", (char *)0}; pid_t pid = fork(); if (pid == 0) { // 子进程中执行 execv("/bin/ls", argv); // 如果到达此处,说明 execv 调用失败 perror("execv error"); _exit(EXIT_FAILURE); } return 0; } ``` 该示例演示了当 `execv` 调用失败时的情况处理方式。通常情况下,应该检查错误原因以便调试。 --- ### 注意事项 1. 当前进程会被新程序完全覆盖,因此任何后续代码都不会被执行(除非 `execv` 失败)。 2. 需要注意权限问题以及目标可执行文件是否存在。 3. 可以通过 `strerror(errno)` 或者其他工具捕获具体的错误消息。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值