2013-11-28 3 views
0

Я пытаюсь реализовать файловую систему в памяти с использованием плавкого предохранителя. Функция переименования принимает параметры «от» и «до».Реализация переименования в файловой системе плавкого предохранителя

Когда я попытался сделать это на баш, мв file1 file2, он внутренне вызывает функцию переименования (я использовал опцию -d, чтобы проверить его).

Когда я пытаюсь переименовать функцию в графическом интерфейсе, она снова вызывает функцию переименования.

Но если файл2 - это уже существующий файл, команда mv перезаписывает его, тогда как графический интерфейс не позволяет мне переименовать файл. Как принудительно применять это ограничение, потому что внутренне оба эти действия вызывают функцию rename без каких-либо различий.

+0

Почему вы считаете, что поведение с 'mv' отличается от вашей файловой системы, чем любая другая файловая система? –

+2

Afaik единственный способ получить это поведение - проверить, существует ли файл как отдельная операция, даже до вызова 'rename'. Я предполагаю, что графический интерфейс, который вы описываете, делает это. –

+0

Я не верю, что mv отличается. Я беспокоюсь, что когда я делаю mv file1 file2, файл2 перезаписывается, если он уже существует. Если я переименую на gui, это предотвратит меня. Как мне обрабатывать его в моем коде, когда внутренне они оба вызывают функцию переименования. – Torpedo

ответ

1

Функция rename автоматически заменяет целевой файл удалением старого имени. В этом весь смысл, и если он не сделает это правильно, разные вещи сломаются плохо. Для приложений, которые хотят предотвратить переименование поверх другого файла, они должны использовать функцию link (которая не удастся, если цель существует), а затем unlink старое имя, если было выполнено link.

+0

Или, даже проще, GUI может просто проверять, используется ли другое имя файла и отображать ошибку, если это так. Это не атомный, конечно, но это вряд ли будет значительным в графическом менеджере файлов. – duskwuff

+0

@duskwuff: Действительно, я подозреваю, что это способ, которым работает большинство сломанных графических программ ... но это не значит, что мы должны потворствовать этому. На самом деле это может иметь значение, если у вас есть большая операция копирования/перемещения в одном окне, где жесткий диск/переключение происходит плохо и интерактивно переименовывает файл в другое окно. –

+1

Вы не всегда можете использовать 'link()'. Не все файловые системы поддерживают жесткие ссылки (например, FAT), а некоторым (например, HFS +) может потребоваться много дополнительной работы для обработки ссылки/разблокировки. – duskwuff

Смежные вопросы