执行程序函数:exec一族函数

命令export,echo $path, env,查看当前环境变量的值

int execl(const char *path, const char arg, …/ (char *) NULL */);
int execlp(const char *file, const char arg, … / (char *) NULL */);
int execle(const char *path, const char arg, … /, (char *) NULL, char * const envp[] */);
int execv(const char *path, char *const argv[]);//方框为中括号
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char const argv[], char const envp[]);
l:表示list,说明执行程序的命令行参数以列表的方式提供,并且以NULL结尾,但是
参数个数没有限制**.
**eg: char *arg0, char arg1, char arg3, NULL
p:以p结尾的exec函数表示第一个参数不是完整的路径名,而是一个程序名.这样的话就需要从环境表中的PATH变量中取得每一项,与第一个参数组合成一个完整的路径.
PATH=/bin:/us/bin:.
exec()函数会继续匹配"/bin/filename","/usr/bin/filename"...,直到找到第一个  正确的路径
v:表示vector,说明命令行参数要以二维数组的形式提供给新程序.
e:表示传递给新程序的环境变量列表,这个列表是一个二维数组,每一行都是一个变量.如果没有显式地传递一个环境变量表,那么新程序将复制父进程的环境表.

注意:如果文件名带有"/"将会被认为是一个路径名.
代码示例:

  1 #include <stdlib.h>
  2 #include <stdio.h>
  3 #include <unistd.h>
  4 #include <sys/types.h>
  5 #include <sys/wait.h>
  6 
  7 int main(void)
  8 {
  9     pid_t pid;
 10     char *cmd_arr[] = {"ls","-l","-a", NULL};
 11     pid = fork();
 12     if(pid < 0)
 13     {
 14         perror("fork()");
 15     }
 16     else if(pid == 0)
 17     {
 18         printf("This is child process ...\n");
 19         //if(execv("/bin/ls", cmd_arr) == -1)
 20         //if(execl("/bin/ls", "ls", "-l", "-a", NULL) == -1)
 21         if(execvp("ls", cmd_arr) == -1)
 22         {
 23             perror("execv()");
 24         }
 25         exit(0);
 26     }
 27     else
 28     {
 29         waitpid(pid, NULL, 0);
 30         printf("This is parent process id : %u\n"    , getpid());
 31         exit(0);
 32     }
 33 
 34 }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值