Дождитесь удаления файла после закрытия

Я работаю над менеджером квот, реализованным в C / C ++ под OS X, который ограничивает максимальный размер определенной папки. В моем проекте есть общие рабочие потоки, которые могут выполнять либо запись новых данных в папку, либо перемещение данных из папки на сервер.

Таким образом, иногда задача удаления может удалить файл, который все еще находится в процессе записи на диск другим потоком.

Могу ли я как-то предотвратить удаление файла во время записи. Я могу реализовать собственный механизм (используя флаги, блокировки и т. Д.), Но я считаю, что это должно быть свойством файловой системы.

Я попробовал следующий код, чтобы проверить, удаляет ли удалить файл все еще открыт, но на самом деле это успешно.

#include <stdio.h>
int main() {
FILE *fp;
fp=fopen("./x", "w");
fprintf(fp, "Testing...\n");
if( remove( "./x" ) != 0 )
perror( "Error deleting file" );
else
puts( "File successfully deleted" );
return 0;
}

как я могу закрыть файл перед удалением?

3

Решение

Использовать lsof Команда, чтобы проверить, какие файлы открыты. (lsof — список открытых файлов)

Например, вы можете вызвать lsof с -F p, и он выведет pid процессов с префиксом ‘p’:

$ lsof -F p /some/file
p1234
p4567

См .: lsof man page

1

Другие решения

Вы можете использовать chattr (см .: https://en.wikipedia.org/wiki/Chattr) от предотвращения удаления файла. Прочитайте свойство «Неизменный».

0

По вопросам рекламы [email protected]