对于Linux下的命令行参数,及环境变量存储问题探讨

在Linux下的main函数是怎样存储的呢?

以下代码及结果都是在centos下测试的。

用下面代码测试一下:



argc:表示传入的形参个数。

argv[]:是一个数组指针。表示传入的形参。

测试结果如下:

 


以上两个测试实质是一样的,上面的是相对路径,下面的是绝对路径。他们都是传入一个参数。


输入多个参数会如何呢?


分析如下:


ls等命令也是一个可执行程序,所以它的执行过程如同main函数一般。

例如:ls -a -n -i ,-a -n -i如传入的argv[]一样,argc等于3。


再谈环境变量,那么,如何在函数中查看环境变量呢?

方法1:

#include<stdio.h>
   int main(int argc,char* argv[],char* env[])
   {
     int i=0;
     for(;i<argc;i++)
     {
     printf("%d-->%s\n",i,env[i]);
        }
      return 0;
      }

方法2:

   #include<stdio.h>
   int main(int argc,char* argv[],char* env[])
{ 
   extern char **environ;
      int i=0;
      for(;environ[i];i++)
      {
     printf("%d--->%s\n",i,environ[i]);
      }
      return 0;
  }




以上两种方法都是查看全部的环境变量。有些不方便。

Linux中也有相应的函数。此处介绍两个。getenv(name)和putenv(name=value)

这两个函数都包含在头文件#include<stdlib.h>中。


getenv(name):参数输入环境变量即可。详细用法可用命令:man getenv查看。

简单举例:比如查看HOME变量。

#include<stdio.h>
  #include<stdlib.h>
  int main()
  {
  
    printf("%s\n",getenv("HOME"));
  }
结果:

          

putrnv(name=value):name表示环境变量,value表示环境变量的值。详细用法可用命令:man putenv查看

若成功返回值为0,环境变量若存在,则会修改变量的值,若不存在,变量会被创建且已经写进去了。失败返回非0值。

简单举例:

#include<stdio.h>
#include<stdlib.h>
  int main()
  {
       printf("%s\n",putenv("MYENV=1234"));
  }

结果如下:

                     


关于环境变量,命令行参数,他们在地址空间是存储在那一阶段呢?

测试代码:

  #include<stdio.h>
  int main(int argc,char* argv[],char* env[])
  {
      int i=0;
     printf("argv:%p\n",argv[i]);
      printf("stack:%p\n",&i);
      printf("env:%p\n",env[i]);
     return 0;
  }
结果如下:

               
 所以,新的地址空间增加了。

    



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值