2013-10-05 4 views
0

Я разработал программу для запуска флеш-накопителей. Моя идея состояла в том, чтобы поместить кнопку Eject в программу, чтобы вы могли легко «безопасно удалить» диск. Однако на Mac вы не можете размонтировать накопитель, пока приложение все еще работает, если вы не отключите его. Мой вопрос: должен ли я это делать?Должен ли я принудительно отключать?

Разве это не силовая развязка, подобная простому вытаскиванию диска? Безопасно ли сделать этот вариант доступным?

Также есть альтернатива?

ответ

0

Я понимаю, ваше приложение работает с самого диска, да?

Вместо того чтобы принудительно выталкивать привод, вы должны spawn отдельный процесс. В основном вы пишете небольшую вспомогательную программу, которая ждет, когда ваша основная программа перестанет работать, затем выталкивает диск и, наконец, выходит из себя. Когда вы создадите вспомогательный процесс, вам придется сделать это «не дожидаясь». Терминология может отличаться в зависимости от языка, который вы используете («в новом потоке» или «detaching a process»), но основная идея заключается в том, что вы должны запустить вспомогательную программу, чтобы перейти от вашей основной программы таким образом, чтобы ваша основная программа может выйти.

Плохая форма для принудительного извлечения - вы не можете быть уверены, что диск не используется. Например, на Mac вы часто просматриваете/записываете Spotlight на внешние диски.

+0

Вы правы в том, что приложение запускается с диска, который я хочу извлечь. Таким образом, в основном, я мог бы написать временный сценарий из основной программы на другой диск, который ждет выхода программы, а затем выталкивает диск и удаляет программу. Единственное, что диск нельзя отключить по другой причине, моя программа все равно останется. Есть ли какой-либо способ определить, можно ли его размонтировать перед попыткой? – Andy

+0

Возможно, команда lsof имеет возможность сделать это. Вы также можете установить таймер, и через несколько секунд либо «сдаться», либо «принудительно извлечь». – Charlesism

+0

Да, я вижу, как я могу использовать 'lsof'. Спасибо за Ваш ответ. Он указал мне в правильном направлении. – Andy

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