Linux下系统调用之exec函数族探索

原创 2013年12月04日 16:17:29

主要通过在一个C程序代码调用另外一个C代码生成的执行文件来说明。

说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是:

  #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 execve(const char *path, char *const argv[], char *const envp[]);

返回值

  如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。

    l表示以参数列表的形式调用

  v表示以参数数组的方式调用

  e表示可传递环境变量

  p表示PATH中搜索执行的文件,如果给出的不是绝对路径就会去PATH搜索相应名字的文件,如PATH没有设置,则会默认在/bin,/usr/bin下搜索。

具体示例:

#include <stdio.h>

void main()
 {
     int i;
     if ( fork() == 0 ) 
     {   
        /* 子进程程序 */
//        for ( i = 1; i <10; i ++ ) 
           printf("This is child process\n");
     }   
    else 
    {   
       /* 父进程程序*/
  //     for ( i = 1; i <10; i ++ ) 
       printf("This is parent process\n");

    }   

}

运行结果:




调用上面生成2进制文件:

#include <stdio.h>
#include <stdlib.h>
#include<unistd.h>
#include <errno.h>
//char command[256];
void main()
{
   int rtn; /*子进程的返回数值*/
       /* 从终端读取要执行的命令 */
       printf( ">" );
    //   fgets( command, 256, stdin );
      // command[strlen(command)-1] = 0;
       if ( fork() == 0 ) {/* 子进程执行此命令 */
//          execlp( "test", NULL );
         // execlp( "test", NULL );
       // execlp("ls","-al",NULL);
        execl("/home/buyingfei888/test",NULL);
          /* 如果exec函数返回,表明没有正常执行命令,打印错误信息*/
         // perror( );
          exit( errno );
       }   
       else {/* 父进程, 等待子进程结束,并打印子进程的返回值 */
          wait ( &rtn );
          printf( " child process return %d\n", rtn );
       }

}

运行结果:


版权声明:本文为博主原创文章,转载请注明出处 http://blog.csdn.net/buyingfei8888

linux的子进程调用exec( )系列函数

exec( )函数族 :    下面我们来看看一个进程如何来启动另一个程序的执行。在Linux中要使用exec函数族。系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其参数包括文...
  • u012590688
  • u012590688
  • 2015年07月21日 20:06
  • 1167

Linux 软件系列之九——exec函数族和system函数调用

1.exec函数族可以实现在一个进程中启动另一个程序的功能。系统内核会使用新的程序替换原有进程中使用的程序。开始新程序的执行。新进程和原有的进程号相同。调用exec函数后,代码段中的内容被新进程的代码...
  • laoniu_c
  • laoniu_c
  • 2014年01月03日 21:48
  • 1290

Linux中---exec族函数解析

(1)exec函数说明 fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定...
  • zhengqijun_
  • zhengqijun_
  • 2016年10月18日 20:17
  • 4345

exec函数族的作用与讲解

apue看到第八章,对exec函数族的理解一直都很混乱,总觉得不对劲儿,其实不能理解的先暂时跳过,看到后面,再结合实例也就慢慢的理解了。 以下内容转自:http://www.cppblog.com/...
  • Enter_
  • Enter_
  • 2013年11月13日 10:00
  • 3598

Linux多任务编程(三)---exec函数族及其基础实验

exec函数族 函数族说明   fork() 函数用于创建一个新的子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的子进程如何执行呢?exec 函数族就提供了一个在进程中启动另一个程序...
  • mybelief321
  • mybelief321
  • 2013年06月09日 13:55
  • 9221

Linux进程控制函数之exec()函数的学习

转载地址:http://www.linuxidc.com/Linux/2011-02/32125p6.htm, 感谢原作者。
  • stpeace
  • stpeace
  • 2014年09月21日 17:13
  • 2435

Linux系统编程——进程替换:exec 函数族

在 Windows 平台下,我们可以通过双击运行可执行程序,让这个可执行程序成为一个进程;而在 Linux 平台,我们可以通过 ./ 运行,让一个可执行程序成为一个进程。 但是,如果我们本来就...
  • lianghe_work
  • lianghe_work
  • 2015年08月16日 18:33
  • 1283

Linux中exec系列函数的应用

这段时间在研究linux中用户登陆和shell执行程序的原理。我们知道,shell命令分为内部命令和外部命令,内部命令有诸如cd,history,exit,echo等,常见的外部命令有ls,ping,...
  • tycoon1988
  • tycoon1988
  • 2014年09月05日 17:27
  • 858

exec函数用法总结

1. exec函数说明 fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间...
  • zjwson
  • zjwson
  • 2016年11月25日 18:34
  • 2778

linux系统编程之进程(三):exec系列函数和system函数

一、exec替换进程映象 在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建了一个进程之后,通常将子进程替换成新的...
  • Simba888888
  • Simba888888
  • 2013年05月15日 16:26
  • 3889
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下系统调用之exec函数族探索
举报原因:
原因补充:

(最多只允许输入30个字)