关于execv函数

来源:互联网 发布:深圳创意软件 编辑:程序博客网 时间:2024/06/04 01:36

     exec函数有六个但是实际上掌握好一个自己熟悉的就好了,因为他们作用都是一样的,我在这里最喜欢用的是execv,所以就只讨论这个函数的用法。

     期间代码要和fork交相使用,fork有两个返回值,父进程返回子进程的pid,子进程返回0,因为子进程可以用getppid()知道父进程的pid(父进程唯一是这个理论的支持),而父进程可以拥有多个子进程,所以无法用函数去单纯获得子进程pid。

      函数原型

      #include <unistd.h>

      int exevc(const char *pathname,char *const argv[]);

      关于argv里面的参数,之前我一直有所疑惑,先用一个简单的代码看看如果这样写里面会有什么::

#include <unistd.h>

#include <stdio.h>

int main(int argc,char* argv[])
{
  printf("argv[0]::%s\n",argv[0]);
  printf("argv[1]::%s\n",argv[1]);
  printf("argv[2]::%s\n",argv[2]);
  execv("/bin/ls",argv);
  return 0;
}


      运行结果和使用方法::

截图有点不清晰但是不影响观看,可以看出argv的结尾一定是空指针,而里面存放的就是命令要调用的参数。


以下是我对第二个参数进行的测试:

#include <unistd.h>
#include <stdio.h>


int main(int argc,char* argv[])
{
  char *my[3] = {0};
  my[0] = "nihao";
  my[1] = "-l";
  //my[2]空指针
  execv("/bin/ls",my);
  return 0;
}

运行结果:


可见运行结果并没有受到影响,所以可以得出结论


关于execv的第二个参数数组,他的第一个位置存放的东西对于程序没有影响(但是应该存应用程序名字本身,可是我发现里面不管放什么都不影响程序结果所以得出这个结论,因为我不知道它放程序名字的意义何在),但是第二个及第二个以后存放的就是她应该使用的参数,最终结尾是空指针。




0 0