繁体   English   中英

使用find作为参数的execlp

[英]execlp with find as parameter

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

find ~ -name file.txt

在Linux中,所有名为file.txt的文件都将显示在控制台屏幕上。 我想制作一个使用execlp函数执行相同操作的C程序,以查找具有诸如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函数来执行此操作。 非常感谢你!

第一个示例中的“〜”由外壳而不是内核扩展。 在C语言中执行命令时,您不会经过外壳程序,因此您无法期望这种替换会发生。 好吧,除非您确实调用了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变量替换代码中的“〜”参数即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM