gpt4 book ai didi

c - 在 c 程序中使用 'rm' 命令使用 stdlib.h 中的 system() 函数

转载 作者:太空狗 更新时间:2023-10-29 15:42:40 24 4
gpt4 key购买 nike

我正在尝试在主例程中使用 rm 命令删除我已采用命令行参数的文件。该值存储在 argv[2] 我尝试使用

system("rm argv[2]");

system("rm ./argv[2]");

system("rm $HOME/argv[2]");

但是它给我一个错误提示

"cannot locate file argv[2]"

文件名存储在 argv[2] 中,我已经检查过了。

有人请指导我!

最佳答案

为什么不使用 remove unlink 命令而不是 system("rm ...")

remove(argv[2]);unlink(argv[2]);


system("rm ...") 的情况下

更新必须使用

如果必须使用system("rm ...") , ZelluX声明您必须从 argv[2] 检索文件名是正确的.您可以在 argv[2] 中检索字符串使用 snprintf strncpy 。使用限制输入大小的函数变体是 good idea因为无法保证 argv[2] 中字符串的长度.

根据您的应用,您可能还想调用 stat 验证 argv[2] 中的字符串确实是一个文件,可能会限制文件的类型。

示例:

这个例子调用 stat 验证 argv[2]是一个普通文件并且 asprintf 为缓冲区动态分配空间。

char *p;
struct stat st;

if (stat(argv[2], &st) == 0 && S_ISREG(st->st_mode))
{
if (asprintf(&p, "rm %s", argv[2]) != -1)
{
system(p);
free(p);
}
}

关于c - 在 c 程序中使用 'rm' 命令使用 stdlib.h 中的 system() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2250140/

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