[英]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.