【问题标题】:"getting" path in linuxlinux中的“获取”路径
【发布时间】:2010-09-08 00:07:24
【问题描述】:

我正在 linux 中编写一个 c 程序。像 execv() 这样的命令需要 c 字符串形式的路径。有没有以 c 风格字符串的形式返回当前路径的命令?

【问题讨论】:

  • 您真的是指 当前工作目录 意义上的“当前路径”(一个不是很有用的概念!),或者更确切地说是“当前工作目录所在的路径”可执行文件存在”(一个更有用的概念,但很难全面定义)?

标签: c linux operating-system


【解决方案1】:

getcwd():

概要

#include <unistd.h>

char *getcwd(char *buf, size_t size);

描述

getcwd() 函数将当前工作目录的绝对路径名放在buf 指向的数组中,并返回buf。复制到数组的路径名不应包含符号链接的组件。 size 参数是 buf 参数所指向的字符数组的字节大小。如果 buf 是空指针,则 getcwd() 的行为是未指定的。

返回值

成功完成后,getcwd() 将返回 buf 参数。否则,getcwd() 将返回一个空指针并设置 errno 以指示错误。 buf 指向的数组的内容然后是未定义的....

【讨论】:

    【解决方案2】:

    execv() 的 path 参数是您希望执行的应用程序的路径,而不是当前工作目录(将由 getcwd() 返回)或 shell 搜索路径(将由 getenv("PATH")) 返回。

    根据您所做的工作,您可能会从 C 库中的 system() 函数而不是较低级别的 exec() 系列中获得更多的好处。

    【讨论】:

    • system()非常 重量级的,它启动一个完整的 shell 来解释给定的命令行。如果您不想提供可执行文件的完整路径并依赖环境的 $PATH,则可以使用execvp(3)exec(3) 的手册页记录了具有相关功能的整个动物园。
    【解决方案3】:

    不是ANSI C:

    #include <unistd.h>
    
    char path[MAXPATHLEN];
    getcwd(path, MAXPATHLEN);
    printf("pwd -> %s\n", path);
    

    【讨论】:

      【解决方案4】:

      如果路径可以是相对路径,你应该可以使用'.'或 './' 作为路径。我不确定它是否会起作用,但你可以试试。

      【讨论】:

        【解决方案5】:

        我不是专业程序员,所以这不是一个确切的答案。

        你需要做的是获取环境变量PWD(当前工作目录)

        我不确定它在什么库中,但它是一个标准的 linux 头文件。

        我会四处看看,看看能不能找到。

        编辑:

        我在考虑 ,getenv() 如果您还需要运行系统命令并需要位于 PATH 中的各种 bin 路径,这将有所帮助

        【讨论】:

          猜你喜欢
          • 2010-10-10
          • 2019-10-15
          • 2023-04-01
          • 1970-01-01
          • 2010-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多