Linux系统调用跟我学――僵尸进程(九)

2010-12-30 20:28:22 · 作者: 雷镇 · 浏览: 9864
就不会白白作无用功了,也就提高了效率。

稍稍深入

上面6条函数看起来似乎很复杂,但实际上无论是作用还是用法都非常相似,只有很微小的差别。在学习它们之前,先来了解一下我们习以为常的main函数。

下面这个main函数的形式可能有些出乎我们的意料:

int main(int argc, char *argv[], char *envp[])


它可能与绝大多数教科书上描述的都不一样,但实际上,这才是main函数真正完整的形式。

参数argc指出了运行该程序时命令行参数的个数,数组argv存放了所有的命令行参数,数组envp存放了所有的环境变量。环境变量指的是一组值,从用户登录后就一直存在,很多应用程序需要依靠它来确定系统的一些细节,我们最常见的环境变量是PATH,它指出了应到哪里去搜索应用程序,如/bin;HOME也是比较常见的环境变量,它指出了我们在系统中的个人目录。环境变量一般以字符串"XXX=xxx"的形式存在,XXX表示变量名,xxx表示变量的值。

值得一提的是,argv数组和envp数组存放的都是指向字符串的指针,这两个数组都以一个NULL元素表示数组的结尾。

我们可以通过以下这个程序来观看传到argc、argv和envp里的都是什么东西:

/* main.c */
int main(int argc, char *argv[], char *envp[])
{
printf("n### ARGC ###n%dn", argc);
printf("n### ARGV ###n");
while(*argv)
printf("%sn", *(argv++));
printf("n### ENVP ###n");
while(*envp)
printf("%sn", *(envp++));
return 0;
}


编译它:

$ cc main.c -o main


运行时,我们故意加几个没有任何作用的命令行参数:

$ ./main -xx 000
### ARGC ###
3
### ARGV ###
./main
-xx
000
### ENVP ###
PWD=/home/lei
REMOTEHOST=dt.laser.com
HOSTNAME=localhost.localdomain
QTDIR=/usr/lib/qt-2.3.1
LESSOPEN=|/usr/bin/lesspipe.s