在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;
}
结果如下:
所以,新的地址空间增加了。