Неблокирующее монтирование в Linux - PullRequest
4 голосов
/ 28 января 2009

Я использую функцию Linux mount(2) в однопоточном процессе. Но монтирование таких устройств, как CD-ROM, может занять некоторое время (худшее, что я видел, это 40 секунд!), Так как это немного обдумает, раскрутит диск и только потом смонтирует файловую систему. Это может блокировать процесс от обработки других событий в течение значительного времени.

Я не могу найти способ смонтировать файловую систему неблокирующим образом. Есть ли способ смонтировать файловую систему асинхронно без многопоточности или разветвления?

Знать, завершено ли действие, для меня не проблема, так как я уже читал события ядра в той же теме.

Ответы [ 3 ]

13 голосов
/ 28 января 2009

Нет. Не запуская другой поток или fork() ing, вам придется ждать, пока mount() вернется.

2 голосов
/ 28 января 2009

Вы можете разрешить запуск процесса монтирования в фоновом режиме. Внедрено что-то вроде:

system("mount -a ");

До

system("mount -a &");

Это позволит вам завершить работу в фоновом режиме.

Но, посмотрев немного ближе, в этом решении используется не интерфейс C, а системный интерфейс

2 голосов
/ 28 января 2009

Если вы хотите сделать это однопоточным способом, вы можете вручную выполнить команду монтирования и создать фоновый цвет и опросить для завершения, используя select () или что-то еще. Тем не менее, это хакерский и не очень отличается от разветвления и вызова mount () в вашей программе.

Также стоит отметить, что я наблюдал, как mount () блокировал весь процесс (и связанные с ним потоки), поэтому для истинного асинхронного поведения, вероятно, следует использовать разветвление.

...