C: Функция удаления удаляет все файлы?
-
24-09-2019 - |
Вопрос
Я использую что-то вроде этого:
char *file;
file = (char *)malloc(BUFSIZE * sizeof(char));
printf("Enter the filename:");
scanf("%s", file);
if(remove(file)) {
printf("Error while removing");
}
Я создал два файла:
touch filetobedeleted1.txt
chmod 777 filetobedeleted1.txt
touch filetobedeleted2.txt
chmod 444 filetobedeleted2.txt
Теперь моя программа удаляет как файлы, но это не должно произойти правильно? Кто-нибудь знает, что не так с кодом?
Редактировать: добавлен код для размещения имени в файл ...
Хорошо ... Похоже, все зависит от разрешений, установленных в каталоге, но тогда есть способ использовать разрешения файлов в качестве проверки?
Решение
Под семантикой POSIX файловой системы, проверка разрешений, используемая для удаления файла, является ли вы писать в каталог, в котором находится файл; нет Есть ли у вас разрешение на запись на сам файл.
(Если каталог имеет липкий набор битов, то вы также должны быть владельцем файла - /tmp
использует это).
Другие советы
Удаление файла требует только для записи доступа в каталоге.
Строго говоря, то, что вы удаляете, это ссылка на файл, Hardlink. Сам файл не будет удален, пока все ссылки на файл не исчезнут.
Попробуйте с помощью команды RM!
remove()
вызовы unlink()
, и по словам man 2 unlink
, что только нужно только писать разрешения на родитель каталог.
Вы можете использовать getumask()
функция и дать ему чек до вызова remove()
.