2015-04-02 99 views
1

因此,我正在研究一种读取文件的应用程序,就像vim或cat的方式一样,在其中键入“appname /path/to/file.txt “,它将文件路径作为参数传递给以某种方式操作文件的程序。获取C应用程序从/ bin /在Linux中启动时的当前路径

虽然我遇到了路障。在vim,cat或类似的程序中,你可以输入“appname file.txt”,它会读取当前目录中你从终端启动应用程序的文件。

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

我的应用程序将被存储在/ bin /目录中的二进制文件中,所以我可以从任何地方使用终端启动它,但是当我从终端调用它时,如何传递目录中的路径名?因为我是一个新的Linux开发人员(我一直在使用Windows中的.NET语言),我不确定天气是由Linux终端还是由C应用程序本身处理。

任何帮助或建议将不胜感激!另外,如果从终端运行它比在/ bin /中执行它更有效的方法,请告诉我。

+0

您在终端中的目录是程序启动时的当前目录。 – immibis 2015-04-02 01:03:20

+0

@immibis,真的吗?太棒了!所以当我通过它的文件名没有路径,它会读它? – thesupergeek 2015-04-02 01:04:42

+0

@thesupergeek - 如果您只想传递文件名,例如'myapp file.txt',然后你可以将参数传递给'fopen'之类的东西,它会将它解释为一个常规路径,所以它会在当前目录中搜索。 – teppic 2015-04-02 01:34:15

回答

1

如果你想要得到的进程运行从您可以使用系统调用getcwd复制字符串到缓冲区,并返回它的目录。内核为每个进程都记录这一点。

例如

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

工作目录可以更改,但会默认启动进程。

0

这应该工作得很好,而无需做任何特别的事情。你有没有尝试过一些不像你预期的那样工作?

通常,您不会将用户程序放在/ bin中。我会将你的程序存储在/ usr/local/bin中。

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

+0

如果它在当前目录中启动,我认为我只是不正确地混淆了这些参数。我可以自己解决这个问题。另外,我将它放在/ usr/bin /中,谢谢你澄清。非常感谢你的帮助! – thesupergeek 2015-04-02 01:07:08

相关问题