Frage

Ich verwende Linux mount(2) Funktion in einem Singlethread-Prozess. Aber Montage von Geräten Geräte wie CD-ROM kann eine Weile dauern (schlechteste, das ich je gesehen habe 40 Sekunden ist!), Da es ein wenig darüber nachdenken wird, drehen die Scheibe auf und wird nur montieren dann das Dateisystem. Dies kann bei der Verarbeitung von anderen Veranstaltungen für geraume Zeit den Prozess blockieren.

Ich kann kein Dateisystem in einer nicht blockierenden Art und Weise zu montieren scheinen einen Weg zu finden. Gibt es eine Möglichkeit, ein Dateisystem asynchron ohne Multi-Threading oder Forking zu montieren?

Zu wissen, ob die Aktion abgeschlossen ist, ist für mich kein Problem, da ich bereits Kernel uevents im selben Thread lesen.

War es hilfreich?

Lösung

Nein. Ohne Brennen anderen Thread oder fork()ing nach oben, müssen Sie warten, für mount() zurück.

Andere Tipps

Wenn Sie es in einer Single-Threaded Weise tun wollen, können Sie den Befehl mount und Hintergrund manuell ausführen und abfragen für den Abschluss mit select () oder so etwas. Dies ist jedoch hackish und nicht sehr verschieden von Forking und Aufruf mount () in Ihrem Programm.

Auch erwähnenswert ist, dass ich erlebt habe mount () einen gesamten Prozess blockiert (und die damit verbundene Themen), so für echtes asynchrones Verhalten, Forking wahrscheinlich der Weg zu gehen.

Sie können Sie den Montagevorgang im Hintergrund laufen lassen. Insted laufen ungefähr wie:

system("mount -a ");

Do

system("mount -a &");

Dies wird das mouning komplett im Hintergrund für Sie lassen.

Aber nach einem wenig näher sucht, ist diese Lösung nicht die C-Schnittstelle verwenden, aber die System-Schnittstelle

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top