Не может удалить (rm) файл в программе c, но может в оболочке
Моя программа на C (в Linux) должна удалить файл, скажем, /home/me/myfile, вот как я это делаю в своей программе
...
system ("rm -f /home/me/myfile");
...
При запуске этой программы я получил сообщение о том, что разрешение отклонено. КСТАТИ, ls -al /home/me/myfile
возвращается -rw-r--r--
Тем не менее, под той же учетной записью пользователя и в той же оболочке, где я выполняю программу C, я могу просто удалить файл, набрав rm -f /home/me/myfile
Что я здесь пропустил?
Спасибо,
Обновление: Использование remove(/home/me/myfile)
или же unlink(/home/me/myfile)
, файл может быть удален в моей программе.
1 ответ
Начнем с того, что права доступа к каталогу определяют, можете ли вы удалить файл.
Но, сказав это, есть множество вещей, которые могут отличаться между этими двумя ситуациями. Ваша программа может работать от имени другого пользователя (например, с битом SETUID), путь может быть другим, что приведет к другому rm
при запуске программа может настроить chroot
джейл, чтобы он больше не мог видеть файл (хотя это может проявиться как другая ошибка) и так далее. Возможности довольно большие.
Тем не менее, C обеспечивает вызов для удаления файлов, называемый unlink
- вы должны использовать это в предпочтении, а затем проверить errno
,
Я хотел бы предложить проверить вывод which rm
в обоих случаях вместе с полными сведениями о файле и исполняемом файле, владельце и разрешениях.