如何在 C 中执行此外壳代码" ls PathToDirectory > newFile.txt"以创建一个包含目录内容列表的新文件



如何在 C 中执行此外壳代码ls PathToDirectory > newFile.txt以创建一个包含目录内容列表的新文件。

我已经尝试过,但这总是给我一个错误。"ls:无法访问'>':没有这样的文件或目录">

我正在使用此代码:

execl( "/bin/ls","ls","PathToTheDirectory" ,">","newFileTocreate.txt" , NULL);

输出:

ls:无法访问">":没有这样的文件或目录 新文件创建.txt

"显示目录的内容">

一种方法是使用系统调用,如 dols.c 中的此示例

#include <stdio.h>
#include <stdlib.h>
int main(){
int ret = system("ls > listing.txt");
if (ret) printf("ERROR: non-zero return %d", ret);
}
  • 编译、运行和检查
[C]$ gcc dols.c 
[C]$ ./a.out 
[C]$ more listing.txt 
a.out
dols.c

输出重定向>是一个 shell 构造,execl系列函数无法理解;它们不会调用 shell 来运行命令。

发生的情况是>作为参数传递给ls因此,它表示当前目录中没有此类文件。

您有以下几种选择:

  • 您可以使用popen(3)运行命令并读取输出,然后可以写入文件。

    char buf[1024] = {0};
    FILE *fp = popen("/bin/ls PathToTheDirectory");
    while(fgets(buf, sizeof buf, fp)) {
    /* write to newFileToCreate.txt */
    }
    
  • open(2)文件并复制((dup2)其标准输出,然后执行它,以便将输出写入文件。

    int fd = open("newFileToCreate", O_WRONLY | O_CREAT | O_TRUNC);
    dup2(fd, STDOUT_FILENO);
    execl( "/bin/ls", "ls", "PathToTheDirectory", NULL);
    
  • 使用调用外壳的system(3)。因此,您可以根据需要执行命令。虽然,请注意,应尽可能避免使用此选项。请参阅从 C C++ 在 Linux 中发出系统命令

    system("/bin/ls PathToTheDirectory > newFileTocreate.txt");
    

相关内容

最新更新