gpt4 book ai didi

c - 如何使用 exec 或 execv 运行 find 命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:52 24 4
gpt4 key购买 nike

我正在使用 find . -name "file.txt" | tee -a file_path<.txt>从当前文件夹开始递归搜索“file.txt”。 tee命令是将所有路径保存到在其中找到“file.txt”的目录。它工作得很好,但现在我想用 C 代码实现这个命令。
你能给我一些关于如何用 system() 实现它的帮助吗? , exec() , execv() ,或者您认为更好或更合适的任何其他功能?

我的意思是搜索一个文件 (file1.txt) 并将所有指向它的路径保存在另一个文件 (file2.txt) 中。然后:

open first file -> add/copy text -> close file -> 
open second file -> add/copy text...

我知道如何使用:fopen , fwrite , fread , opendir ,但我无法通过 C 代码设法获取文件路径。

最佳答案

您可能不需要为此运行任何进程。您可能应该使用 nftw(3)相反,函数(它会稍微快一些,并且不需要任何外部命令,如 find)在文件树中搜索 *.txt 文件。

如果你只想扫描一个目录(不是子目录),你可以简单地使用 opendir(3) & readdir(3) (不要忘记 closedir);你可能需要使用类似 snprintf(3) 的东西(或 asprintf(3) )构建路径。

顺便说一句,还有glob(3) & wordexp(3) (& stat(2) & access(2) ...) 这可能是相关的。

如果您有一些 char* str; 包含路径(例如通过 nftw 间接给出),您可以测试它是否以 .txt< 结尾

int slen = strlen(str);
if (slen>4 && !strcmp(str-slen-4, ".txt")) {
// do something when str ends with ".txt"
}

如果您坚持使用外部 find 命令,请考虑 popen(3) & 关闭。害怕code injection如果路径作为输入来自外部(想象一个调皮的用户输入 foo; rm -rf $HOME 作为文件名)。

你应该阅读 Advanced Linux Programming ....

关于c - 如何使用 exec 或 execv 运行 find 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27797592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com