2014-07-07 32 views
0

我尝试使用下面的方法从C程序中使用删除文件夹中的所有文件:使用execv/EXECL删除所有文件

execl("/bin/rm","/media/sda1/*",0,0,0,0,0,0,0,0,0); 

,但我得到的失败: RM:不能删除'/ media/sda1/*':没有这样的文件或目录,尽管此文件夹中有文件。 如何使用execv系列删除所有文件或将所有文件(从一个文件夹复制到另一个文件夹)?有人有什么主意吗 ?

感谢, 冉

回答

4

的问题是由glob模式/media/sda1/*您使用造成的:请注意,星号,其外壳将扩大到该文件夹​​中的所有非隐藏文件的列表。如果您直接将它传递给rm,它会尝试删除名为*的文件夹。

如果您不想手动迭代文件夹中的所有文件,则需要在shell中启动命令,该命令将为您扩展glob模式。

你可以使用

execl("/bin/bash","-c 'rm -rf /media/sda1/*'",0,0,0,0,0,0,0,0,0); 

...为了。一个不错的选择是使用system()在shell其中隐含启动命令:

system("rm -rf /media/sda1/*"); 

更多:

+0

+1为'使用系统() - 它可以用来运行程序,以及一些就像'system(“nohup progname>/dev/null 2>&1&”)'一样,也没有阻塞。 – slashmais