`
gstarwd
  • 浏览: 1525742 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

exec族

 
阅读更多
execl(执行文件)    
   
  相关函数    
  fork,execle,execlp,execv,execve,execvp  
  表头文件    
  #include<unistd.h>  
  定义函数    
  int   execl(const   char   *   path,const   char   *   arg,....);  
  函数说明    
  execl()用来执行参数path字符串所代表的文件路径,接下来的参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空指针(NULL)作结束。  
  返回值    
  如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。  
  范例    
  #include<unistd.h>  
    main()  
    {  
    execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char   *   )0);  
    }  
  执行    
  /*执行/bin/ls   -al   /etc/passwd   */  
    -rw-r--r--   1   root   root   705   Sep   3   13   :52   /etc/passwd  
     
   
    execlp(从PATH   环境变量中查找文件并执行)    
  相关函数    
  fork,execl,execle,execv,execve,execvp  
  表头文件    
  #include<unistd.h>  
  定义函数    
  int   execlp(const   char   *   file,const   char   *   arg,……);  
  函数说明    
  execlp()会从PATH   环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。  
  返回值    
  如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno   中。  
  错误代码    
  参考execve()。  
  范例    
  /*   执行ls   -al   /etc/passwd   execlp()会依PATH   变量中的/bin找到/bin/ls   */  
    #include<unistd.h>  
    main()  
    {  
    execlp(“ls”,”ls”,”-al”,”/etc/passwd”,(char   *)0);  
    }  
     
  执行    
  -rw-r--r--   1   root   root   705   Sep   3   13   :52   /etc/passwd  
   
   
   
    execv(执行文件)    
  相关函数    
  fork,execl,execle,execlp,execve,execvp  
  表头文件    
  #include<unistd.h>  
  定义函数    
  int   execv   (const   char   *   path,   char   *   const   argv[   ]);  
  函数说明    
  execv()用来执行参数path字符串所代表的文件路径,与execl()不同的地方在于execve()只需两个参数,第二个参数利用数组指针来传递给执行文件。  
  返回值    
  如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno   中。  
  错误代码    
  请参考execve()。  
  范例    
  /*   执行/bin/ls   -al   /etc/passwd   */  
    #include<unistd.h>  
    main()  
    {  
    char   *   argv[   ]={“ls”,”-al”,”/etc/passwd”,(char*)   }};  
    execv(“/bin/ls”,argv);  
    }  
  执行    
  -rw-r--r--   1   root   root   705   Sep   3   13   :52   /etc/passwd  
   
   
    execve(执行文件)    
  相关函数    
  fork,execl,execle,execlp,execv,execvp  
  表头文件    
  #include<unistd.h>  
  定义函数    
  int   execve(const   char   *   filename,char   *   const   argv[   ],char   *   const   envp[   ]);  
  函数说明    
  execve()用来执行参数filename字符串所代表的文件路径,第二个参数系利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组。  
  返回值    
  如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno   中。  
  错误代码    
  EACCES  
    1.   欲执行的文件不具有用户可执行的权限。  
    2.   欲执行的文件所属的文件系统是以noexec   方式挂上。  
    3.欲执行的文件或script翻译器非一般文件。  
    EPERM  
    1.进程处于被追踪模式,执行者并不具有root权限,欲执行的文件具有SUID   或SGID   位。  
    2.欲执行的文件所属的文件系统是以nosuid方式挂上,欲执行的文件具有SUID   或SGID   位元,但执行者并不具有root权限。  
    E2BIG   参数数组过大  
    ENOEXEC   无法判断欲执行文件的执行文件格式,有可能是格式错误或无法在此平台执行。  
    EFAULT   参数filename所指的字符串地址超出可存取空间范围。  
    ENAMETOOLONG   参数filename所指的字符串太长。  
    ENOENT   参数filename字符串所指定的文件不存在。  
    ENOMEM   核心内存不足  
    ENOTDIR   参数filename字符串所包含的目录路径并非有效目录  
    EACCES   参数filename字符串所包含的目录路径无法存取,权限不足  
    ELOOP   过多的符号连接  
    ETXTBUSY   欲执行的文件已被其他进程打开而且正把数据写入该文件中  
    EIO   I/O   存取错误  
    ENFILE   已达到系统所允许的打开文件总数。  
    EMFILE   已达到系统所允许单一进程所能打开的文件总数。  
    EINVAL   欲执行文件的ELF执行格式不只一个PT_INTERP节区  
    EISDIR   ELF翻译器为一目录  
    ELIBBAD   ELF翻译器有问题。  
     
  范例    
  #include<unistd.h>  
    main()  
    {  
    char   *   argv[   ]={“ls”,”-al”,”/etc/passwd”,(char   *)0};  
    char   *   envp[   ]={“PATH=/bin”,0}  
    execve(“/bin/ls”,argv,envp);  
    }  
     
  执行    
  -rw-r--r--   1   root   root   705   Sep   3   13   :52   /etc/passwd  
     
   
   
    execvp(执行文件)    
  相关函数    
  fork,execl,execle,execlp,execv,execve  
  表头文件    
  #include<unistd.h>  
  定义函数    
  int   execvp(const   char   *file   ,char   *   const   argv   []);  
  函数说明    
  execvp()会从PATH   环境变量所指的目录中查找符合参数file   的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。  
  返回值    
  如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。  
  错误代码    
  请参考execve()。  
  范例    
  /*请与execlp()范例对照*/  
    #include<unistd.h>  
    main()  
    {  
    char   *   argv[   ]   ={   “ls”,”-al”,”/etc/passwd”,0};  
    execvp(“ls”,argv);  
    }  
  执行    
  -rw-r--r--   1   root   root   705   Sep   3   13   :52   /etc/passwd
分享到:
评论

相关推荐

    Linux进程与线程实验,exec族函数、管道、消息队列、信号机制、共享内存等

    Linux系统提供了丰富的API来支持进程间的通信(IPC,Inter-Process Communication),包括exec族函数、管道、消息队列、信号机制以及共享内存等。本实验旨在让学生深入理解和掌握这些通信机制。 **1. exec族函数** ...

    Linux中使用exec函数族详解及示例代码 | 嵌入式Linux应用开发篇 – 03

    1.exec函数族 exec 为 execute(执行),exec 函数族用来替换调用进程所执行的程序,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行,替换前后进程的 PID 不会改变。 exec函数族中包括6个...

    进程替换:exec 函数族示例代码

    在Linux系统编程中,进程替换是一种重要的技术,它允许一个正在运行的进程用新的程序来替代自身,这个过程通常涉及到`exec`函数族。`exec`函数族包括多个成员,如`execl`, `execlp`, `execle`, `execv`, `execvp`, ...

    Linux环境下的进程

    本文将深入探讨Linux环境下的进程,包括进程的创建、退出机制,以及与之相关的exec族函数、system函数和popen函数。 首先,我们来理解**进程的创建**。在Linux中,创建新进程通常使用`fork()`函数,它会复制当前...

    linux进程之exec函数族.zip

    在Linux操作系统中,进程执行是通过系统调用来完成的,其中`exec`函数族就是一组用于替换当前进程映像的函数。这些函数允许程序在不退出的情况下加载并执行新的程序。在本压缩包中,包含的`execl.c`和`helloexec.c`...

    操作系统与Linux管理:进程的管理与创建实践

    包括使用Linux系统命令查看进程信息(如ps、top、pstree)、编写C语言程序创建子进程、以及通过系统调用fork( )创建子进程并在子进程中执行新的程序(如exec族函数)。此外,还讲解了进程的状态、标识符管理和终止...

    exec函数族的使用

    作者:王姗姗,华清远见嵌入式学院... 下面来看下exec函数族:  #include  int execl(const char *path, const char *arg, ...);  int execlp(const char *file, const char *arg, ...);  int execle(cons

    unix高级编程网络编程面试题

    16. **exec族函数和system函数的区别**:`exec`族函数用于替换当前进程的执行映像,而`system`函数是调用系统命令行来执行一个命令。 17. **TCP三次握手过程,accept发生在哪个阶段**:`accept`发生在三次握手的...

    linux-sys.zh 邢文鹏课件

    7. 进程管理:进程是操作系统的核心概念之一,包括进程环境、进程状态、进程原语(如fork、exec族、wait/waitpid)以及进程间通信机制(如管道、有名管道、内存共享映射、信号等)。 8. 信号处理:信号是进程间通信...

    linux-sys.zh.pdf

    其中,进程原语包括fork、exec族、wait/waitpid。这部分的学习需要理解进程概念以及如何创建、管理和终止进程。 在进程间通信(IPC)章节中,文档详细介绍了各种进程间通信机制。包括pipe管道、FIFO有名管道、内存...

    基于exec函数族分析Linux初始化进程运行环境的过程

    ### 基于exec函数族分析Linux初始化进程运行环境的过程 #### 一、Linux内存管理简介 Linux操作系统采用了一种高效的虚拟内存管理机制,其中主要包括分页管理技术。这一技术的核心在于将物理内存划分为固定大小的块...

    Linux进程编程

    - **exec族**:用新的程序替换当前进程映像。 - **_exit()**:终止当前进程。 - **wait()** 和 **waitpid()**:等待子进程结束并获取其状态信息。 - **System函数**:用于执行一个shell命令。 #### 四、进程管理...

    linux简单概述

    - **exec族**:替换进程映像,包括`execl()`, `execle()`, `execlp()`, `execv()`, `execvp()`等。 - **wait()**:等待子进程结束。 - **waitpid()**:更灵活地等待指定子进程结束。 - **exit()**:进程正常退出。 -...

    linux进程和线程编程(exec)

    Linux进程和线程编程(exec) 在Linux操作系统中,进程和线程编程是非常重要的概念,exec函数族...exec函数族是Linux中非常重要的进程创建函数,了解exec函数族的使用和特点对我們编写高效、可靠的Linux程序非常重要。

    Linux下Fork与Exec使用

    - **2.2.2 exec() 函数族**: - **作用**: 替换当前进程的映像为新的进程映像,即用另一个程序替换当前运行的程序。 - **常见函数**: - `execl()`: 用于替换当前进程的映像。 - `execle()`: 类似 `execl()`,但...

    Linux下生成进程换出进程杀死进程例子

    Linux下生成进程换出进程杀死进程例子 函数fork,exec族函数,exit函数例子

    EDA/PLD中的exec函数族的使用

    在计算机科学领域,特别是在操作系统和进程管理中,`exec`函数族是一组重要的系统调用,用于在当前进程中加载并执行新的程序。这些函数在`&lt;unistd.h&gt;`头文件中定义,广泛应用于C语言编程中。`EDA/PLD`(电子设计自动...

    linux小项目MP3播放器.pdf

    mpg123 - 可以读取linux的标准输出流我们将数据读取输出到标准输出流里面通过exec族函数执行mpg123程序就可以实现音乐播放的功能。(我们无法做一个MP3播放的核心程序只是在别人做好的基础上做一个简单的封装,达到...

Global site tag (gtag.js) - Google Analytics