execvpe.c

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #include <stdio.h>
#include <process.h>

void main(void)
 {
   char *env[] = { "FILENAME=SPAWNVXX.C", "OS=DOS",
                   "ROUTINE=EXECVPE", NULL };

   char *argv[] = { "CHILD.EXE", "AAA", "BBB", NULL };

   execvpe("CHILD.EXE", argv, env);
 }

 

`execvpe` 函数是 Unix 或类 Unix 系统中的一个函数,它用于执行一个新程序,替换当前的进程映像。这个函数的名称中的 `exec` 表示“执行”,`v` 表示参数是以向量(数组)的形式传递的,`p` 表示使用环境变量 `PATH` 来查找要执行的文件,`e` 表示可以传递一个包含环境变量的数组给新程序。 下面是一个使用 `execvpe` 函数的示例代码: ```c #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/wait.h> int main(int argc, char *argv[]) { pid_t pid; char *args[] = {"ls", "-l", NULL}; // 假设我们要执行 ls -l 命令 char *envp[] = {"PATH=/bin:/usr/bin", NULL}; // 自定义环境变量PATH pid = fork(); // 创建子进程 if (pid == 0) { // 子进程执行 execvpe("ls", args, envp); // 执行ls命令 // 如果execvpe成功,下面的代码会执行 perror("execvpe failed"); exit(EXIT_FAILURE); } else if (pid > 0) { // 父进程执行 int status; waitpid(pid, &status, 0); // 等待子进程结束 if (WIFEXITED(status)) { printf("Child process exited with status %d\n", WEXITSTATUS(status)); } } else { // fork失败 perror("fork failed"); exit(EXIT_FAILURE); } return 0; } ``` 在这个例子中,我们首先使用 `fork` 创建了一个子进程。在子进程中,我们尝试执行 `ls` 命令,并传递给它一个参数数组 `args` 和一个环境变量数组 `envp`。如果 `execvpe` 调用成功,它会替换当前进程的映像,执行 `ls` 命令,并且会返回。如果 `execvpe` 调用失败,会打印错误信息并退出进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值