进程可以有两个当前目录?《windows核心编程》

进程可以有两个当前目录?
我一直以为,进程的当前目录就是 EXE 所在的路径,但是看了下面的内容,我找不到北了。
下面的内容来自《windows核心编程》第五版,81页,4.1.8节



系统跟踪记录着进程的当前驱动器和目录,但它没有记录每个驱动器的当前目录。不过利用操作系统提供的支持,可以处理多个驱动器的当前目录。这个支持是通过进程的环境字符串来提供的。例如,一个进程可以有如下所示的两个环境变量:
=C:=C:\Utility\Bin
=D:=D:\Program Files
上述变量指出进程在 C 驱动器的当前目录为 \Utility\Bin,在 D 驱动器的当前目录为 \Program Files。



1、上面的第二句说“但它没有记录每个驱动器的当前目录”。驱动器还有当前目录?驱动器不就是 C:\ 、 D:\ 这种吗?它们已经是任何路径的起始,怎么还会有它们的路径呢?!!!
2、一个进程有两个当前目录是怎么回事?

------解决方案--------------------------------------------------------
>1、上面的第二句说“但它没有记录每个驱动器的当前目录”。驱动器还有当前目录?驱动器不就是 C:\ 、 D:\ 这种吗?它们已经是任何路径的起始,怎么还会有它们的路径呢?!!!
驱动器有当前目录,你可以用cmd很简单的测一下,run cmd,显示的是当前系统盘的当前目录,我这儿Win 7上是C:\Users\username\, 你切换到其他驱动器,比如D:, 然后切换回C:,你会看到还是C:\Users\username\,就是说驱动器C的当前目录还是C:\Users\username\

>2、一个进程有两个当前目录是怎么回事?
进程的当前目录与驱动器的当前目录不是一个概念,进程的当前目录是指进程所在的驱动器的当前目录

>我一直以为,进程的当前目录就是 EXE 所在的路径
当然不一定,如果你从命令行来运行EXE的话。

------解决方案--------------------------------------------------------
比如你的程序在C:\Windows\notepad.exe,你打开cmd,当前目录是C:\Users\username\,你运行C:\Windows\notepad.exe, 那么这个进程的当前目录是C:\Users\username\, 不是C:\Windows\notepad.exe, 你可以在你的程序里调用GetCurrentDirectory来测试。

------解决方案--------------------------------------------------------
获取进程的当前目录:GetCurrentDirectory();

GetCurrentDirectory Function

Retrieves the current directory for the current process.

------解决方案--------------------------------------------------------
你运行cmd
会有C:\Users\Consumer>
这个就是当前目录,显然不是cmd.exe所在的目录
然后cd c:\windows就到了c:\windows
接着cd d:\downloads,但是当前目录没变,因为你还在c盘
下面执行d:,就到了d:\DOWNLOADS>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值