我使用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...

我知道如何使用:fopenfwritefreadopendir,但我无法通过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)&pclose。如果路径是作为输入从外部输入的(想象一下一个淘气的用户将foo; rm -rf $HOME作为文件名输入)。
你应该读code injection

10-06 13:45
查看更多