【发布时间】:2011-03-28 01:25:46
【问题描述】:
如何将“pwd”(或在这种情况下的任何其他命令)结果(当前工作目录)分配给 char* 变量?
命令可以是任何东西。不仅限于“密码”。
谢谢。
【问题讨论】:
-
啊,密码只是一个例子。我想概括一下这个问题......我的坏......
如何将“pwd”(或在这种情况下的任何其他命令)结果(当前工作目录)分配给 char* 变量?
命令可以是任何东西。不仅限于“密码”。
谢谢。
【问题讨论】:
以popen 开头。这将让您运行一个命令,其标准输出指向您的父母可以阅读的FILE *。从那里只需像读取任何普通文件一样读取其输出(例如,fgets、getchar 等)
不过,通常情况下,您最好避免为此运行外部程序——您应该有getcwd 可用,这将更直接地给出相同的结果。
【讨论】:
为什么不直接打电话给getcwd()?它不是 C 标准库的一部分,但它是 POSIX,并且得到了非常广泛的支持。
无论如何,如果pwd 只是一个示例,请查看popen()。这将运行一个外部命令并为您提供一个 FILE* 用于读取其输出。
【讨论】:
有一个 POSIX 函数,getcwd() 用于此 - 我会使用它。
【讨论】:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
char *dir;
dir = getcwd(NULL, 0);
printf("Current directory is: %s\n", dir);
free(dir);
return 0;
}
我很懒,喜欢 NULL, 0 参数,这是一个 GNU 扩展,可以根据需要分配尽可能大的缓冲区来保存完整路径名。 (如果你被深埋了几十万个字符,它可能仍然会失败。)
因为它是为你分配的,所以你完成后需要free(3)它。我很快就完成了它,所以我很快free(3) 它,但这可能不是你需要使用它的方式。
【讨论】:
您可以 fork 并使用其中一个 execv* 函数从您的 C 程序调用 pwd,但得到的结果充其量只是一团糟。
在 C 程序中获取当前工作目录的正确方法是调用 char* getcwd(char* name, size_t size);
【讨论】: