我正在使用 setenv 动态分配文件名,如下所示:
setenv("file.name",filename.c_str,1);
我很好奇这是否是每个进程?
如果我有多个进程运行此代码但采用不同的文件名,是否会有任何冲突?
可以说我有过程1
setenv("file.name",filename1.c_str,1);
和过程2
setenv("file.name",filename1.c_str,1);
我这样做会有什么问题吗?
谢谢。
您设置的环境setenv()
是每个进程。本质上,它只是您进程中的一个内存区域。至少,这是在 UNIX 系统上所做的。不像getenv()
它不是 C 或 C++ 标准的一部分,但它是 POSIX 的一部分。它在非 POSIX 系统上的作用(如果存在)可能会有所不同。
据我所知,在所有现代操作系统上,每个进程都有一个单独的环境块,通常在创建进程时构建。(例如,NtCreateProcess()
在 Windows 系统上)或 Linux/Unix/Other 的等价物。 _putenv()
将在 Windows上运行,而setenv()
在 Linux/Unix 上运行。
环境变量是特定于平台的。我认为 setenv() 不适用于 Windows,因此假设您正在谈论在 Linux 上运行的程序,您应该没问题。setenv() 设置具有进程范围的环境变量(当然在分叉线程之间共享)。