Не может удалить (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 в обоих случаях вместе с полными сведениями о файле и исполняемом файле, владельце и разрешениях.

Другие вопросы по тегам