Вопрос

Я использую что-то вроде этого:

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().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top