每个进程设置环境变量?
我使用 setenv 动态分配文件名,如下所示:
setenv("file.name",filename.c_str,1);
我很好奇这是否是每个进程的?
如果我有多个进程运行此代码但采用不同的文件名,是否会发生任何冲突?
假设我有流程 1
setenv("file.name",filename1.c_str,1);
和流程 2,
setenv("file.name",filename1.c_str,1);
这样做会有什么问题吗?
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您使用
setenv()
设置的环境是针对每个进程的。本质上它只是进程中的一个内存区域。至少,UNIX 系统上是这样的。与 getenv() 不同,它既不是 C 也不是 C++ 标准的一部分,但它是 POSIX 的一部分。它在非 POSIX 系统上的作用(如果存在)可能会有所不同。The environment you set with
setenv()
is per process. Essentially it is just a memory area in your process. At least, this is what does on UNIX systems. Unlikegetenv()
it isn't part of either the C or the C++ standard but it is part of POSIX. What it does on non-POSIX systems, if it exists, may be something different.环境变量是特定于平台的。我认为 setenv() 不适用于 Windows,因此假设您正在谈论在 Linux 上运行的程序,那么应该没问题。 setenv() 设置具有进程范围的环境变量(当然在分叉线程之间共享)。
Environment variables are platform specific. I don't think setenv() works with Windows, so assuming you are talking about a program running on Linux, you should be fine. setenv() sets environment variables with process scope (and of course shared amongst forked threads).
据我所知,在所有现代操作系统上,每个进程都有一个单独的环境块,通常在创建进程时构建。 (例如,在 Windows 系统上的
NtCreateProcess()
期间)或 Linux/Unix/其他系统的等效过程。_putenv()
适用于 Windows,而setenv()
适用于 Linux/Unix。To my knowledge, on all modern operating systems, each process has a seperate environment block which is usually constructed when the process is created. (e.g. during
NtCreateProcess()
on a Windows system) or the equivalent for Linux/Unix/Other._putenv()
will work on Windows wherassetenv()
will work on Linux/Unix.