0

我会试着解释我的问题。如果我执行以下命令

find ~ -name file.txt

在 Linux 中,所有被命名的文件都file.txt将显示在控制台屏幕上。我想制作一个 C 程序来做同样的事情,使用该execlp函数查找所有具有特定名称的文件,例如file.txt.

如果我做这样的事情:

execlp("find","find","-name","file.txt",NULL); 

它编译得很好,但在执行时它只显示名称file.txt位于当前工作目录中的文件。如果我在我的程序中做这样的事情:

execlp("find","find","~","-name","file.txt"); 

它编译得很好,但在执行时它给了我以下错误:

find: `~': No such file or directory. 

我应该为execlp函数提供哪些参数以file.txt在所有可用目录中搜索?我需要使用该execlp功能执行此操作。非常感谢!

4

1 回答 1

1

第一个示例中的“~”是由 shell 扩展的,而不是内核扩展的。在 C 中执行命令时,您不会通过 shell,因此您不能指望这种替换会发生在您身上。好吧,除非您确实调用了一个 shell 并要求它运行您的命令,如execlp("/bin/sh", "/bin/sh", "-c", "find", "~", ...);.

执行您正在执行的操作的首选方法是检查 HOME 环境变量,或从密码数据库获取当前用户的主目录。这是如何做到的。

#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <stdlib.h>

const char *homedir = getenv("HOME");
if (homedir == NULL) {
    struct passwd *pw = getpwuid(getuid());
    homedir = pw->pw_dir;
}

然后只需将代码中的“~”参数替换为 homedir 变量。

于 2013-10-21T17:43:49.843 回答