【问题标题】:Get current path when C app is launched from /bin/ in Linux在 Linux 中从 /bin/ 启动 C 应用程序时获取当前路径
【发布时间】:2015-06-06 20:14:31
【问题描述】:

所以,我正在开发一个读取文件的应用程序,就像 vim 或 cat 一样,您可以在其中键入“appname /path/to/file.txt”并将文件路径作为参数传递给程序以某种方式操纵文件。

不过,我遇到了障碍。在 vim、cat 或类似程序中,您可以键入“appname file.txt”,它会读取您从终端启动应用程序的当前目录中的文件。

例如,我想在我的文档目录中编辑一个文件。我输入“cd ~/Documents”,然后我可以输入“vim ~/Documents/Essay.txt”,也可以输入“vim Essay.txt”。

我的应用程序将存储在 /bin/ 目录中的二进制文件中,因此我可以使用终端从任何地方启动它,但是当我从终端调用它时,如何传递我所在目录的路径名?

由于我是一名新的 Linux 开发人员(我一直使用 Windows 中的 .NET 语言),我不确定这是由 Linux 终端还是由 C 应用程序本身处理的。

任何帮助或建议将不胜感激!

另外,如果有比将其粘贴在 /bin/ 中更有效的方式从终端运行它,请告诉我。

【问题讨论】:

  • 你在终端中的目录就是你程序启动时的当前目录。
  • @immibis,真的吗?棒极了!那么当我传递给它没有路径的文件名时,它会读取它吗?
  • @thesupergeek - 如果您只想传递文件名,例如myapp file.txt,然后您可以将参数传递给fopen 等,它会将其解释为常规路径,因此它会在当前目录中搜索。
  • @teppic 回答了我的问题!谢谢!

标签: c linux path


【解决方案1】:

如果您想获取运行进程的目录,可以使用系统调用getcwd 将字符串复制到缓冲区并返回。内核会为每个进程跟踪这一点。

例如

char buf[100];
printf("Current directory: %s\n", getcwd(buf, 100));

工作目录可以更改,但默认为启动进程的位置。

【讨论】:

    【解决方案2】:

    这应该可以正常工作,而无需您做任何特别的事情。您是否尝试了一些没有按预期工作的方法?

    一般情况下,您不会将用户程序放在 /bin 中。我会将您的程序存储在 /usr/local/bin 中。

    https://unix.stackexchange.com/a/8658

    【讨论】:

    • 如果它在您的当前目录中启动,我想我只是错误地对 peramiters 进行了干预。我可以自己弄清楚。另外,我在 /usr/bin/ 中有它,谢谢你的澄清。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2012-11-26
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    相关资源
    最近更新 更多