• 【Linux】探索环境变量与C语言命令行参数处理


    前言

    在计算机编程和系统管理中,环境变量是一项至关重要的概念。它们不仅可以帮助程序获取系统配置信息和用户偏好设置,还可以在不同的进程之间传递数据。同时,C语言中处理命令行参数也是一个常见的任务,对于开发命令行程序或者系统管理工具都非常有用。本文将介绍环境变量的基本概念、特性,以及使用C语言处理命令行参数的两种方法。

    环境变量的基本概念

    环境变量是操作系统提供的一种系统级别的变量,用来存储系统的配置信息、用户的偏好设置等。环境变量并不是单独的一个变量,而是一组彼此独立的变量的集合。每个环境变量都有一个名称和一个对应的值。

    常见的环境变量包括但不限于:

    • PATH:用于指定系统搜索可执行文件的路径。
    • USER:当前登录用户的用户名。
    • HOME:当前用户的主目录路径。
    • PWD:当前工作目录的路径。

    在C语言中,可以通过getenv函数来获取特定环境变量的值,例如:

    #include 
    
    int main() {
        const char *username = getenv("USER");
        if (username != NULL) {
            printf("当前用户名:%s\n", username);
        } else {
            printf("无法获取用户名\n");
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    环境变量的特性

    1. 全局属性

    环境变量具有全局属性,它们会被所有的子进程包括孙子进程继承。这意味着父进程设置的环境变量会传递给其派生的子进程。

    2. 环境表的组织方式

    每个程序在启动时都会收到一张环境表,这是一个字符指针数组,每个指针指向一个以\0结尾的环境字符串。例如,一个环境字符串可能是"PATH=/usr/bin:/bin"。
    在这里插入图片描述

    命令行操作获取环境变量

    1. 使用char *env[]参数获取

    在C语言的main函数中,可以通过char *env[]参数来获取环境变量的值。这个参数是一个字符指针数组,其中每个指针指向一个环境字符串。

    #include 
    
    int main(int argc, char *argv[], char *env[]) {
        int i = 0;
        for (; env[i] != NULL; i++) {
            printf("%s\n", env[i]);
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2. 使用environ变量获取

    另一种获取环境变量的方法是使用environ变量,它是extern char **environ声明的全局变量,指向环境表。

    #include 
    #include 
    
    extern char **environ;
    
    int main(int argc, char *argv[]) {
        int i = 0;
        for (; environ[i] != NULL; i++) {
            printf("%s\n", environ[i]);
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    这两种方法都可以获取当前进程的环境变量信息,并且可以根据需要进行进一步处理。

    使用 C 语言处理命令行参数的两种方法

    在 C 语言中,处理命令行参数是编写命令行程序时常见的任务之一。本文将介绍两种不同的方法来处理命令行参数,以及它们的用法和示例代码。

    方法一:处理带有数字选项的命令行参数

    #include 
    #include 
    // 要实现三种不同的功能
    // ./mytest -3
    int main(int argc, char *argv[]) 
    {
        if (argc != 2) 
        {
            printf("Usage:\n\t%s -number[1-3]\n", argv[0]);
            return 1;
        }
        if (strcmp("-1", argv[1]) == 0) 
        {
            printf("function 1\n");
        } 
        else if(strcmp("-2", argv[1]) == 0) 
        {
            printf("function 2\n");
        } 
        else if(strcmp("-3", argv[1]) == 0) 
        {
            printf("function 3\n");
        } 
        else 
        {
            printf("unknown!\n");
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

    方法二:处理带有操作和数字的命令行参数

     // ./mytest -add 1 2
    int main(int argc, char *argv[]) 
    {
        if (argc != 4) 
        {
            printf("Usage:\n\t%s -[add|sub|mul|div] x y\n", argv[0]);
            return 1;
        }
        int x = atoi(argv[2]);
        int y = atoi(argv[3]);
    
        if (strcmp("-add", argv[1]) == 0) 
        {
            printf("%d + %d = %d\n", x, y, x+y);
        } 
        else if(strcmp("-sub", argv[1]) == 0) 
        {
            printf("%d - %d = %d\n", x, y, x-y);
        } 
        else if(strcmp("-mul", argv[1]) == 0) 
        {
            printf("%d * %d = %d\n", x, y, x*y);
        } 
            else if(strcmp("-div", argv[1]) == 0) 
        {
            printf("%d / %d = %d\n", x, y, x/y);
        } 
        else 
        {
            printf("unknown!\n");
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    在这里插入图片描述

    总结

    环境变量是系统级别的变量,用于存储系统配置信息和用户偏好设置。在C语言中,可以通过getenv函数获取环境变量的值。此外,处理命令行参数也是一个常见的任务,本文介绍了两种处理命令行参数的方法,可以帮助开发者编写更加灵活和功能丰富的命令行程序。通过学习和掌握这些知识,可以更好地进行系统管理和命令行编程。

  • 相关阅读:
    湖南省政协副主席赖明勇一行莅临麒麟信安调研
    PHP没死,依然有78%的网站在使用
    Springboot面向高校应届毕业生的服务系统39t7k计算机毕业设计-课程设计-期末作业-毕设程序代做
    844. 比较含退格的字符串
    Java中transient关键字的详细总结
    18数据接口和selenium
    关于开源和闭源
    【gazebo要素4】构建插件
    如何确定IP地址的具体位置?
    node.js环境安装及环境变量
  • 原文地址:https://blog.csdn.net/Colorful___/article/details/137202210