Почему бы не использовать команду remove или unlink вместо system("rm ...")
?
remove(argv[2]);
или unlink(argv[2]);
Обновите , если необходимо использовать system("rm ...")
Если необходимо использовать system("rm ...")
, ZelluX правильно указывать, что вы должны получить имя файла из argv[2]
.Вы можете получить строку в argv[2]
, используя snprintf или strncpy .Использование вариантов функций, ограничивающих размер ввода, является хорошей идеей , поскольку нет никакой гарантии относительно длины строки в 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);
}
}