在Linux系统中,每个进程都有两个重要的“附加品”:命令行参数和环境变量。它们是进程与外界交互的桥梁,即使是小白也能轻松理解。本文将带你从零开始,彻底搞懂这两个概念,并学会如何在C程序中获取它们。
当你在终端执行一个命令,比如 ls -l /home,这里的 -l 和 /home 就是传递给 ls 进程的命令行参数。它们以字符串数组的形式传递给新进程,告诉程序该如何运行。
在C语言中,这些参数通过 main 函数的参数接收:int main(int argc, char *argv[])。其中 argc (argument count) 表示参数个数,argv (argument vector) 则存储每个参数字符串的指针。argv[0] 通常是程序本身的名称,argv[1] 开始才是真正的参数。
环境变量是操作系统提供的一组“键值对”,用于存储系统或用户的配置信息,比如当前用户的家目录 HOME=/home/user、可执行文件搜索路径 PATH=/usr/bin:/bin 等。每个进程都继承其父进程的环境变量,并且可以在运行时修改。
在C程序中,可以通过全局变量 extern char **environ 来访问环境变量表,也可以使用 getenv() 函数获取指定变量的值。
下面是一个完整的C程序,它会打印出所有命令行参数和环境变量。你可以把它编译运行,直观感受一下。
#include extern char **environ; // 声明环境变量指针int main(int argc, char *argv[]){ printf("========== 命令行参数 (argc = %d) ==========", argc); for (int i = 0; i < argc; i++) { printf("argv[%d] = %s", i, argv[i]); } printf("========== 环境变量 =========="); for (char **env = environ; *env != NULL; env++) { printf("%s", *env); } return 0;} 编译:gcc prog.c -o prog,然后运行:./prog hello world。你会看到输出的参数和环境变量列表。
当你在shell中执行一个程序时,shell会调用 fork() 创建子进程,然后子进程调用 execve() 系列函数加载新程序。在 execve() 调用时,内核会将命令行参数和环境变量复制到新进程的栈上,并设置好相应的数据结构。因此,每个Linux进程从诞生之初就拥有了这些信息。
argc/argv 获取,用于控制程序行为。environ 或 getenv() 获取,存储系统配置。getenv()、setenv()、unsetenv() 等。掌握了命令行参数和环境变量,你就打开了进程与外界通信的大门。下一篇文章我们将继续深入进程的其他方面,敬请期待!
本文由主机测评网于2026-02-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260225439.html