【发布时间】:2015-02-13 16:26:28
【问题描述】:
我正在尝试查找某人在终端或控制台窗口中键入的命令的完整路径。我正在尝试使用
getenv(PATH)
获取命令可能存在的不同路径的':'分隔字符串,然后使用
stat()
看它是否存在于每一个中。
由于无法使用字符串库,因此无法解析 getenv() 的返回值。
getenv(path) returns:
PATH = /Library/Frameworks/Python.framework/Versions/3.2/bin:/Library/Frameworks/Python.framework/Versions/3.2/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
我正在尝试:
char* fullPath = getenv( "PATH" );
struct stat buffer;
int exists;
char* fileOrDirectory = usersCommand
exists = stat( file_or_dir, &buffer );
if ( exists == 0 && ( S_IFDIR & buffer.st_mode ) ) {
//dir exists
} else if ( exists == 0 && ( S_IFREG & buffer.st_mode ) ) {
//file exists
} else {
//neither exists
}
到目前为止,我没有使用我的 fullPath 变量。现在它只是在我的本地目录中搜索命令吗?
示例命令是 'cd' 或 'ls' 等。
如何解析 ':' 分隔的字符串,然后在每个字符串上调用 stat?除了获得有关文件或目录状态的一些信息之外,我并不完全了解缓冲区的用途,但我觉得它应该采用另一个参数,以便我可以输入我正在搜索的内容以及 fullPath。
谢谢
【问题讨论】:
-
您可以使用
strtok解析:分隔的字符串并检查每个文件夹中的命令。顺便说一句,cd是内置的 shell,而不是 PATH 中的独立可执行文件。 -
不能使用字符串库^