(done) 关于 GNU/Linux API setenv 的实验

写一个下面的代码来验证

c 复制代码
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main() {
    // 设置环境变量 MY_VAR 的值为 "hello_world"
    if (setenv("MY_VAR", "hello_world", 1) != 0) {
        perror("setenv");
        return 1;
    }

    pid_t pid;

    // 使用 fork() 创建一个新进程
    pid = fork();

    if (pid < 0) {
        // 错误处理:fork() 返回负值表示创建子进程失败
        fprintf(stderr, "Fork failed\n");
        return 1;
    } else if (pid == 0) {
        // 在子进程中执行的代码
        printf("Child process: Hello, I am the child process! PID: %d\n", getpid());
        // 获取并打印设置的环境变量 MY_VAR 的值
        char *value = getenv("MY_VAR");
        if (value != NULL) {
            printf("in child, MY_VAR is set to: %s\n", value);
        } else {
            printf("MY_VAR is not set.\n");
        }

        pid_t pid;
        // 使用 fork() 创建一个新进程
        pid = fork();
        if (pid == 0) {
                char *value = getenv("MY_VAR");
                if (value != NULL) {
                    printf("in grandchild, MY_VAR is set to: %s\n", value);
                } else {
                    printf("MY_VAR is not set.\n");
                }
        }

    } else {
        // 在父进程中执行的代码
        printf("Parent process: Hello, I am the parent process! PID: %d\n", getpid());
        printf("Parent process: Child's PID: %d\n", pid);
    }

    // 父子进程都会执行的代码
    printf("Hello from process PID: %d\n", getpid());

    return 0;
}

编译并执行后,执行结果如下:

复制代码
Parent process: Hello, I am the parent process! PID: 923571
Parent process: Child's PID: 923572
Hello from process PID: 923571
Child process: Hello, I am the child process! PID: 923572
in child, MY_VAR is set to: hello_world
Hello from process PID: 923572
in grandchild, MY_VAR is set to: hello_world
Hello from process PID: 923573

可以看到环境变量 MY_VAR 被传递给了儿子和孙子

此时我们在 terminal echo $MY_VAR 试试

可以看到 MY_VAR 为空。也就是说,setenv 所设置的变量的 Lifecycle 仅限于程序还活着的时候

相关推荐
xinyu39122 分钟前
旧版Ubuntu Docker镜像 apt 失败
linux·ubuntu·docker
JZC_xiaozhong34 分钟前
OA调价审批后,采购调价单如何自动同步到ERP?解决漏录错价难题
大数据·linux·服务器·前端·数据库·数据孤岛解决方案·数据集成与应用集成
ljs64827395136 分钟前
Linux 实用命令:环境变量、文件传输、压缩解压、跨服务器传文件
linux·运维·服务器
__Witheart__1 小时前
lunch选择的版型与版型对应的配置文件
android·linux
A小调的码农1 小时前
给垃圾平板“一生E本” 装新系统—————Armbian 编译 KYX T7Y (RK3326) 踩坑全记录
linux·嵌入式硬件
ljs6482739511 小时前
Linux 网络常用命令与端口基础详解
linux·网络·php
蓝狐社1 小时前
一张被低估的芯片版图——中兴通讯
运维·服务器
网络小白不怕黑1 小时前
13.SSH服务相关配置
服务器·网络·ssh
Jtti2 小时前
站群服务器多IP能不能分散DDoS攻击流量?
服务器·tcp/ip·ddos
qq_163135752 小时前
Linux 判断是否安装 Conda / Miniconda 完整方法
linux