美文网首页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)

    4、程序的命令行参数 程序的命令行参数是 main 的参数 argc , argv 指定的。前面第7章第2节说过这...

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

    6、c程序的内存布局 一般来说c程序具有如下的几个部分: 文本段:这里包含 cpu 执行的机器指令。一般来说这个段...

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

    1、简介 在下一章讲述进程控制相关的内容之前,我们需要先看一下单个进程的情况。本章,我们将会看到 main 函数在...

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

    8、内存分配 ISO C 指定了三种内存分配的方式: 这三种函数如果返回的指针是非空的表示分配成功,如果出错了那么...

  • APUE 进程环境

    本文使用golang的syscall,os,golang.org/x/sys/unix包 1.main函数 mai...

  • APUE读书笔记-13守护进程(2)

    3、一些编码规范 写一个守护进程,有一些基本的编码规则,可以避免一些由于交互产生的问题。我们先说一下这些规则,然后...

  • APUE读书笔记-09进程关系(2)

    3、使用网络登陆终端 使用网络和串口终端登陆系统的主要区别是:电脑和终端之间连接的方式不是点到点的。在这种情况下,...

  • APUE第7章 进程环境

    7.1引言 将介绍进程控制原语,在此之前需先了解进程的环境。本章 中将学习:当程序执行时,其main函数是如何被调...

  • APUE读书笔记-17高级进程通信(2)

    举例:stream pipe使用 这里对前面的协作处理程序使用单个的streams pipe做了一个重新的实现。下...

  • APUE读书笔记-08进程控制(2)

    4、vfork vfork函数源于2.9BSD。有些人认为这个函数是多余的,但是本文讨论的系统都支持这个函数。实际...

网友评论

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

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