一般而言,C程序通常由一下几个部分组成。
对于Intel x86处理器上的Linux操作系统而言,典型的存储空间布局如下:
命令行参数是指从命令行执行程序的时候,给程序的参数。C语言总是从main函数执行的,它的命令行参数被ISO C和POSIX规定为如下:
int main(int argc,char *argv[]);
main函数的第一个参数argc保存的是程序执行的时候,命令行输入的参数总个数。其中第0个参数就是被执行的程序名字。第二个参数argv是用来保存命令行参数的。ISO C和POSIX都要求argv[argc]是一个空指针。
一个简单的实例如下:
#include<stdio.h>
int main(int argc,char *argv[])
{
printf("程序执行名:%s\n",argv[0]);
printf("参数列表:\n");
for (int i = 1; i < argc; i++)
{
printf("%s\n",argv[i]);
}
return 0;
}
执行结果如下:
在历史上,大多数的Unix系统其实都是支持3个参数的main函数。其中第三个参数是环境表地址。如下:
int main(int argc,char *argv[],char *envp[]);
现在,POSIX规定了不使用第三个参数,通常使用getenv函数和putenv函数来访问环境变量。
每次程序都有一张环境表,当我们需要查看整个环境的时候,可以使用全局变量environ。它包含了该指针数字的地址。
extern char **environ;
我们来写个程序打印一下全部的环境变量。
#include<stdio.h>
extern char **environ;
int main(int argc,char *argv[])
{
for (int i = 0; NULL != environ[i]; i++)
{
printf("%s\n",environ[i]);
}
return 0;
}
执行以后的结果如下:
依照惯例,环境变量应该是:name=value;这样的字符串构成。ISO C给我们提供了一些和环境变量有关的函数。如下所示:
getenv函数是用来获取一个环境变量。
setenv函数是用来增加或者更改一个环境变量的。unsetenv是用来删除一个环境变量的。