ToB企服应用市场:ToB评测及商务社交产业平台

标题: Linux:进程概念(四.main函数的参数、环境变量及其干系操作) [打印本页]

作者: 兜兜零元    时间: 2024-6-29 11:45
标题: Linux:进程概念(四.main函数的参数、环境变量及其干系操作)
前次讲了:Linux:进程概念(三.详解进程:进程状态、优先级、进程切换与调度)


  

1main()函数的参数

   在编写C/C++代码,我们通常都不会写main()函数的参数,但是在Linux下,main函数是可以带参数的
  main() 函数是 C 和 C++ 步伐中的入口函数,通常用于表示步伐的起始点。在 C 和 C++ 中,main() 函数可以有两种差别的形式:
  1. #include<stdio.h>
  2. #include<unistd.h>
  3. #include<sys/types .h>
  4. int main(int argc, char* argv[])
  5. {
  6.         for (int i = 0; i < argc; i++)
  7.         {
  8.                 printf("%s\n", argv[i]);
  9.         }
  10.         return 0;
  11. }
复制代码

1.1bash处理命令行


1.2利用上述性质,写一个计算器

  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. int main(int argc, char* argv[])
  4. {
  5.     if (argc == 4)
  6.     {
  7.         int a = atoi(argv[2]);//字符串转int
  8.         int b = atoi(argv[3]);//字符串转int
  9.         if (strcmp(argv[1], "-add") == 0)
  10.         {
  11.             printf("%d+%d=%d\n", a, b, a + b);
  12.         }
  13.         else if (strcmp(argv[1], "-sub") == 0)
  14.         {
  15.             printf("%d-%d=%d\n", a, b, a - b);
  16.         }
  17.         else if (strcmp(argv[1], "-mul") == 0)
  18.         {
  19.             printf("%d*%d=%d\n", a, b, a * b);
  20.         }
  21.         else
  22.         {
  23.             printf("%d/%d=%d\n", a, b, a / b);
  24.         }
  25.     }
  26.     else
  27.     {
  28.         printf("used wrongly:please ./code.c [add][sub][mul][div] num1 num2");
  29.         return 1;
  30.     }
  31.     return 0;
  32. }
复制代码

2.环境变量

2.1基本概念

2.2为什么要有环境变量(意义)

2.3常见的环境变量

   我们在运行步伐时,一样平常使用./myprograme(相对路径,本目次下的myprog) 或者直接使用绝对路径。如果什么都不加,直接myprograme,是找不到的。但是使用体系的指令时,就能直接找的
  这是由于存在一个全局的环境变量:PATH
   查看环境变量

echo指令—打印输出文本

echo 用于打印输出文本或变量的内容到标准输出(通常是终端)。基本语法:
  1. echo [选项] [字符串/变量]
复制代码
选项: echo 可以担当一些选项来改变其运动,常见的选项包括:
   
  PATH

  1. echo $PATH
复制代码
  美元符号 $ 通常用于引用环境变量的值,如果不加那只是把PATH当成字符串

    那么当我们想直接用文件名就能执行我们自己的代码时,有两种方法:
  
  1. PATH=自己代码路径:$PATH
复制代码
    如果不加ATH,那么PATH会直接被覆盖,只有自己代码的路径
    2.4环境变量干系的命令

本地变量

直接使用
  1. 变量名=赋值
复制代码
  我们如许就能创建一个本地变量,本地变量不能继承。只能在bash里使用
  

可以使用unset清晰环境变量和本地变量

2.5代码获取环境变量

  1. #include <stdio.h>
  2. int main(int argc, char* argv[], char* envp[])
  3. {
  4.     printf("环境变量列表:\n");
  5.     for (int i = 0; envp[i] != NULL; i++)
  6.     {
  7.         printf("%s\n", envp[i]);
  8.     }
  9.     return 0;
  10. }
复制代码
  数组的最后一个元素是一个空指针,用于表示环境变量数组的结束
  

   
  

getenv 函数用于获取指定环境变量的值。它的原型界说在 <stdlib.h> 头文件中:
  1. char *getenv(const char *name);
复制代码
参数 name 是要获取的环境变量的名称,函数返回该环境变量的值。如果环境变量不存在,则返回 NULL。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     char* path = getenv("USER");
  6.     if (path != NULL)
  7.     {
  8.         printf("USER: %s\n", path);
  9.     }
  10.     else
  11.     {
  12.         printf("USER environment variable not found.\n");
  13.     }
  14.     return 0;
  15. }
复制代码
在 C 语言中,environ 是一个全局变量,用于存储当前进程的环境变量。它通常界说在 <unistd.h> 头文件中。environ 是一个指向字符串数组的指针,每个字符串都表示一个环境变量。
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. extern char** environ;
  4. int main()
  5. {
  6.     char** env = environ;
  7.     while (*env != NULL)
  8.     {
  9.         printf("%s\n", *env);
  10.         env++;
  11.     }
  12.     return 0;
  13. }
复制代码
  extern 是 C 语言中的一个关键字,用于声明一个变量或函数,表明该变量或函数是在其他文件中界说的,当前文件中只是引用了它。
  extern char **environ; 表示声明白一个全局变量 environ,并表明该变量在当前文件中并没有界说,而是在其他文件中界说的。
  

2.6添加或者修改环境变量

putenv 是 C 语言中的一个库函数,它界说在 <stdlib.h> 头文件中。这个函数用于将字符串添加到环境变量中,或者修改已经存在的环境变量的值。
函数原型如下:
  1. int putenv(const char *string);
复制代码
这里的 string 是一个指向以 null 结尾的字符串的指针,该字符串的格式应该是 name=value,此中 name 是环境变量的名称,value 是环境变量的值。
如果 string 指向的字符串成功添加到环境变量中,或者成功修改了已经存在的环境变量的值,那么 putenv 函数返回 0。如果发生错误,返回非零值。
注意,putenv 函数会修改其参数指向的字符串。因此,如果你不希望原始字符串被修改,你应该传递一个字符串的副本给 putenv。别的,由于 putenv 大概会修改环境变量,这大概会影响到步伐中其他部门的运动,因此在多线程环境中使用时需要特殊注意。
2.7 最一开始环境变量哪里来的

我们首先要知道:环境变量确实属于 shell 进程的上下文。当用户退出登录时,shell 进程会结束,从而导致环境变量也随之消失。每次重新登录后,新的 shell 进程会启动,并加载相应的配置文件(如 .bash_profile、.bashrc 等),从而重新设置环境变量,使其生效

   这里也能解释为什么我们每次登陆时,都是进到用户对应的默认目次:如许才气读取到相应的.bash_profile文件
  
今天就到这里啦!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4