如何在 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");