【问题标题】:unix command result to a variable - char*unix 命令结果到变量 - char*
【发布时间】:2011-03-28 01:25:46
【问题描述】:

如何将“pwd”(或在这种情况下的任何其他命令)结果(当前工作目录)分配给 char* 变量?

命令可以是任何东西。不仅限于“密码”。

谢谢。

【问题讨论】:

标签: c char


【解决方案1】:

popen 开头。这将让您运行一个命令,其标准输出指向您的父母可以阅读的FILE *。从那里只需像读取任何普通文件一样读取其输出(例如,fgetsgetchar 等)

不过,通常情况下,您最好避免为此运行外部程序——您应该有getcwd 可用,这将更直接地给出相同的结果。

【讨论】:

    【解决方案2】:

    为什么不直接打电话给getcwd()?它不是 C 标准库的一部分,但它 POSIX,并且得到了非常广泛的支持。

    无论如何,如果pwd 只是一个示例,请查看popen()。这将运行一个外部命令并为您提供一个 FILE* 用于读取其输出。

    【讨论】:

    • 谢谢,但“pwd”只是一个例子,我正在寻找任何命令的通用解决方案。
    【解决方案3】:

    有一个 POSIX 函数,getcwd() 用于此 - 我会使用它。

    【讨论】:

    • 谢谢,但“pwd”只是一个例子,我正在寻找任何命令的通用解决方案。
    【解决方案4】:
    #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) 它,但这可能不是你需要使用它的方式。

    【讨论】:

      【解决方案5】:

      您可以 fork 并使用其中一个 execv* 函数从您的 C 程序调用 pwd,但得到的结果充其量只是一团糟。

      在 C 程序中获取当前工作目录的正确方法是调用 char* getcwd(char* name, size_t size);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-12
        • 2014-04-17
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多