美文网首页LinuxLinux学习之路
APUE读书笔记-07进程环境(2)

APUE读书笔记-07进程环境(2)

作者: QuietHeart | 来源:发表于2020-05-10 10:56 被阅读0次

    4、程序的命令行参数

    程序的命令行参数是 main 的参数 argc , argv 指定的。前面第7章第2节说过这里不重复了。注意的是,c程序的 main 函数参数和 java 程序的 main 函数参数有些不同,c程序中:参数 argc 是命令行中参数的数目(c包含命令名而 java 不含), argv 是指向命令行参数的数组(c中 argv[0] 是命令名而 java 不含)。

    下面的例子程序会打印出传递给该程序的所有命令行的参数,这个程序名称叫做 echoarg 。和 Linux 上面 echo(1) 不同的是,它并不打印第0个参数(即它本身的名称)。

    将所有的命令行参数打印到标准输出的例子:

    #include "apue.h"
    int main(int argc, char *argv[])
    {
        int     i;
    
        for (i = 0; i < argc;  i++)     /* echo all command-line args */
            printf("argv[%d]: %s\n", i, argv[i]);
        exit(0);
    }
    

    对于上述代码, ISO CPOSIX.1 都能够保证 argv[argc] 是一个空指针。所以我们可以用循环 "for (i = 0; argv[i] != NULL; i++)”判断。运行该程序的输出如下:

    $ ./echoarg arg1 TEST foo
    argv[0]: ./echoarg
    argv[1]: arg1
    argv[2]: TEST
    argv[3]: foo
    

    译者注

    原文参考

    参考: APUE2/ch07lev1sec4.html

    5、程序的环境变量列表

    类似参数列表,每个程序都有一个环境变量列表,不过不通过参数指定,而是通过全局变量 environ 来指定。这个变量是:

    extern char **environ;
    

    其元素是一系列以 NULL 结束的字符串(形式是 :name=value )。

    原来环境变量列表是通过为 main 指定第3个参数来传递的,不过现在看来对于一个全局变量来说没有必要这么做了,又因为 ISO C 的规定所以 main 就只有两个参数了。有专门的接口访问指定的环境变量,但是如果想要遍历整个环境变量列表那么就需要通过这个 environ 全局变量了。

    具体点说,环境变量声明的格式为:

    name=value
    

    例如,如果有一个包含5个字符串环境变量的环境,那么其情况大致如下图所示:

           environment       environment        environment
            pointer             list              strings
            +------+          +-------+
    environ:|    --+--------->|     --+---->HOME=/home/sar\0
            +------+          +-------+
                              |     --+---->PATH=:/bin:/usr/bin\0
                              +-------+
                              |     --+---->SHELL=/bin/bash\n
                              +-------+
                              |     --+---->USER=sar\0
                              +-------+
                              |     --+---->LOGNAME=sar\0
                              +-------+
                              | NULL  |
                              +-------+
    

    这里 environ 就是环境指针,指向环境列表这个字符串数组,而环境列表的数组中的每个字符串是一个以 NULL 字符结尾的字符串(一般就是某个环境变量的声明)。

    译者注

    原文参考

    参考: APUE2/ch07lev1sec5.html

    相关文章

      网友评论

        本文标题:APUE读书笔记-07进程环境(2)

        本文链接:https://www.haomeiwen.com/subject/otjdghtx.html