-
-
[原创][tools] which实现原理
-
发表于:
2019-5-14 23:27
5473
-
Linux下很多好用的命令行工具,各种复杂的操作,几个命令就完成了。本节将要说的就是which命令。
windows下也可以使用Linux命令,只要你安装了Cygwin等程序即可;当然,如果你安装了git,也可以找到很多Linux命令工具(我安装在D盘了,目录为D:\Program Files\Git\usr\bin\which.exe)。
下面演示下程序的使用:
可以看出,如果能找到目标程序cmd,which将显示其全路径;如果没有找到目标程序,将提示出未找到,并打印搜索路径。
从上面的例子可以猜测,which通过系统搜索规则,查找相关路径下是否有目标程序。
具体实现可以查看源码,源码地址为http://mirrors.ustc.edu.cn/gnu/which/which-2.21.tar.gz,其中找到which.c可以查看详细实现。
windows有多个相同名称应用的时候,经常遇到需要确认程序路径的情况,比如adb.exe,常常因为多个版本导致异常结果。一直想在windows下写个类似的which程序的功能,又觉得太过琐碎,实现起来麻烦。不过,今天忽发奇想,LoadLibrary函数加载PE文件的搜索路径和which搜索路径如出一辙,何不通过LoadLibrary函数实现which功能呢。
于是写了下面代码:
设置adb环境变量前,运行结果如下图所示,不能正确查找到目标进程路径:
设置adb环境变量后,运行结果如下图所示,正确地将目标进程路径打印了出来:
相关源码已上传git:https://github.com/ninecents/MyOpen/tree/master/tools/tools
九分出品,欢迎吐槽。更多精彩,可以前往博客地址。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-5-14 23:29
被kinghzking编辑
,原因: