zoukankan      html  css  js  c++  java
  • exec函数族用法

     1 #include <unistd.h>
     2  extern char **environ;
     3  int execl(const char *path,
     4            const char *arg, ...);
     5  int execlp(const char *file, 
     6             const char *arg, ...);
     7  int execle(const char *path,
     8             const char *arg,
     9             ..., 
    10             char * const envp[]);
    11  int execv(const char *path,
    12            char *const argv[]);
    13  int execvp(const char *file, 
    14             char *const argv[]);
    15  int execve(const char *file,
    16              char *const argv[],
    17              char *const envp[]);

    exec函数族装入并运行程序path/file,并将参数arg0(arg1, arg2, argv[], envp[])传递给子程序,出错返回-1.

    在exec函数族中,后缀l、v、p、e指定函数将具有某种操作能力:

    后缀 操作能力
    l 希望接收以逗号分隔的参数列表,列表以NULL指针作为结束标志
    v 希望接收到一个以NULL结尾的字符串数组的指针
    p 是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件
    e 函数传递指定参数envp,允许改变子进程的环境,无后缀e时,子进程使用当前程序的环境
      1 #ifdef HAVE_CONFIG_H
      2  #include <config.h>
      3  #endif
      4  
      5  #include <stdio.h>
      6  #include <stdlib.h>
      7  #include <unistd.h>
      8  #include <string.h>
      9  #include <errno.h>
     10  
     11  int main(int argc, char *argv[])
     12  {
     13    //以NULL结尾的字符串数组的指针,适合包含v的exec函数参数
     14    char *arg[] = {"ls", "-a", NULL};
     15    
     16    /**
     17     * 创建子进程并调用函数execl
     18     * execl 中希望接收以逗号分隔的参数列表,并以NULL指针为结束标志
     19     */
     20    if( fork() == 0 )
     21    {
     22      // in clild 
     23      printf( "1------------execl------------\n" );
     24      if( execl( "/bin/ls", "ls","-a", NULL ) == -1 )
     25      {
     26        perror( "execl error " );
     27        exit(1);
     28      }
     29    }
     30    
     31    /**
     32     *创建子进程并调用函数execv
     33     *execv中希望接收一个以NULL结尾的字符串数组的指针
     34     */
     35    if( fork() == 0 )
     36    {
     37      // in child 
     38      printf("2------------execv------------\n");
     39      if( execv( "/bin/ls",arg) < 0)
     40      {
     41        perror("execv error ");
     42        exit(1);
     43      }
     44    }
     45    
     46    /**
     47     *创建子进程并调用 execlp
     48     *execlp中
     49     *l希望接收以逗号分隔的参数列表,列表以NULL指针作为结束标志
     50     *p是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件
     51     */
     52    if( fork() == 0 )
     53    {
     54      // in clhild 
     55      printf("3------------execlp------------\n");
     56      if( execlp( "ls", "ls", "-a", NULL ) < 0 )
     57      {
     58        perror( "execlp error " );
     59        exit(1);
     60      }
     61    }
     62    
     63    /**
     64     *创建子里程并调用execvp
     65     *v 望接收到一个以NULL结尾的字符串数组的指针
     66     *p 是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件
     67     */
     68    if( fork() == 0 )
     69    {
     70      printf("4------------execvp------------\n");
     71      if( execvp( "ls", arg ) < 0 )
     72      {
     73        perror( "execvp error " );
     74        exit( 1 );
     75      }
     76    }
     77    
     78    /**
     79     *创建子进程并调用execle
     80     *l 希望接收以逗号分隔的参数列表,列表以NULL指针作为结束标志
     81     *e 函数传递指定参数envp,允许改变子进程的环境,无后缀e时,子进程使用当前程序的环境
     82     */
     83    if( fork() == 0 )
     84    {
     85      printf("5------------execle------------\n");
     86      if( execle("/bin/ls", "ls", "-a", NULL, NULL) == -1 )
     87      {
     88        perror("execle error ");
     89        exit(1);
     90      }
     91    }
     92    
     93    /**
     94     *创建子进程并调用execve
     95     * v 希望接收到一个以NULL结尾的字符串数组的指针
     96     * e 函数传递指定参数envp,允许改变子进程的环境,无后缀e时,子进程使用当前程序的环境
     97     */
     98    if( fork() == 0 )
     99    {
    100      printf("6------------execve-----------\n");
    101      if( execve( "/bin/ls", arg, NULL ) == 0)
    102      {
    103        perror("execve error ");
    104        exit(1);
    105      }
    106    }
    107    return EXIT_SUCCESS;
    108  }
  • 相关阅读:
    tableView滑动时cell消失
    收集别人写的很好的关于多线程的文章
    scroll或是其子类被添加进view时,界面自动上移
    runtime之实现对象序列化
    runtime之方法的交换
    升级mac中的系统之后,给PHP安装扩展常出现问题
    ubuntu下搭建Scrapy框架简单办法
    CuDA的快速下载链接
    windows下Scrapy爬虫框架环境搭建
    windows下安装pywin32报错:close failed in file object destructor:sys.excepthook is missing lost sys.stderr
  • 原文地址:https://www.cnblogs.com/liwentao1091/p/2931825.html
Copyright © 2011-2022 走看看