zoukankan      html  css  js  c++  java
  • exec

    exec

      • 可加载可执行文件(ELF)或具有X权限的脚本
      • exec并不创建新进程,调用exec前后该进程id并未改变。
      • 进程调用exec函数以执行另一个程序,当前进程的用户空间代码和数据完全被新程序替代,从新程序启动例程开始执行。

    #include <unistd.h>

    extern char **environ;

    int execl(const char *path, const char *arg, ...);

    int execlp(const char *file, const char *arg, ...);

    int execle(const char *path, const char *arg, ..., 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[]);

    • 不带字母p(标识path)的exec函数,第一参数必须是程序相对路径或绝对路径,eg. /bin/ls 或./a.out,而不能是ls或a.out。故其参数名为path。
    • 对于带p的函数,包含/表路径名;无路径在环境变量PATH列表中搜索程序。故其参数为file(可执行程序名)。
    • 按照惯例,argv或arg的第一参数(arg0, argv[0])为程序名,最后一参数为NULL。argv或arg包含程序名,是所有的命令行参数,如同main参数(argv[0]为程序名)。
    • l的函数要求将新程序的每个命令行参数都当作一个参数传给它,参数个数可变。list
    • v的函数要求参数以array数组形式传递。
    • e代表环境变量,最后一个参数为NULL,代表程序新的环境变量。不带e,表示新进程的环境变量来自原进程的外部变量environ。

    失败-1,成功不返回。

    execl("ls", "ls", "-al", NULL); 错误

    execl("/bin/ls", "ls", "-al", NULL); 正确

    char *exec_argv[3] = {"ls", "-al", NULL};
    execvp("ls", exec_argv); 正确

    execv("ls", exec_argv); 错误

    示例

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/wait.h>
    
    int main(void)
    {
        int pid;
        char *cmd[] = {"ls", "-al", NULL};
    
        pid = fork();
        if(pid == 0){ 
            execvp(cmd[0], cmd);
            printf("Can't exex ls
    ");
            exit(-1);
        }   
    
        if(pid < 0){ 
            printf("Can't fork
    ");
            exit(-1);
        } else {
            pid = waitpid(pid, NULL, 0); 
            printf("%d exit
    ", pid);
        }   
        
        return 0;
    }

     

  • 相关阅读:
    python基础
    用纯css改变下拉列表select框的默认样式兼容ie9需要用js
    如何阻止360浏览器backspace键的默认快捷键
    js判断undefined类型,undefined,null, 的区别详细解析
    jquery事件日历插件e-calendar 的修改
    each和for一起使用
    2019.9.24 网络ip小知识
    数据库SQL开始学习_5
    2019.9.22 java小知识
    数据库SQL开始学习_4
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/5011282.html
Copyright © 2011-2022 走看看