問題タブ [fuse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ファイルシステムを実装するためのブロック特殊ファイル/デバイスの操作
FUSE を使用して基本的なファイルシステムを実装し、予見可能なすべての POSIX 機能を実装しました [もちろん、まだプロファイリングしていません ;)]。現在、通常のファイル(st_mode & S_IFREG)
でファイルシステムを実行できますが、開発の次のステップは、実際のブロック デバイスでホストすることです。コードをそのまま実行すると、デバイスst_size
で呼び出しfstat
た後、すぐに読み取りに失敗します。もちろん、問題がそこで止まるとは思っていません。
- 通常のファイルではなく、ブロック デバイスで操作するには、どのような変更が必要ですか?
- パフォーマンス、制限、特別な機能などに関して、特別に考慮する必要があることは何ですか?
- ブロック スペシャル ファイルの取り扱いに関するチュートリアルやリファレンスはありますか? グーグルはほとんど役に立ちません。私は背景知識 (皮肉なことに私の暗い過去の MSDN から) とマンページにいくつかの乏しい情報しか持っていません。
Update0
- 「通常のファイル」の意味を指摘しました。
- デバイスのサイズを取得することに集中したくありません。パフォーマンスと使用に関する通常のファイルとデバイス ファイルの違いに関する一般的なガイドラインが必要です。
c++ - FUSE で一般的に使用される構造とアルゴリズムを提供する任意のライブラリ
FUSE を使用してファイル システムのプロトタイプを作成します。FUSE 以外に、dir キャッシュ、ジャーナリング、ルックアップ テーブル、atomic ops などの一般的なファイル システム最適化機能を提供できる (追加の) 適切に実装されたライブラリはありますか? C で記述したほうがよいでしょう。
ちなみにOSXとLinuxで実装する予定です。これは、私が FUSE を使用する主な懸念事項の 1 つですが、ネイティブ ファイル システムは使用しません。パフォーマンスは重要です。
ありがとう。
qt - Qt プログラミングによる FUSE (ユーザー空間のファイルシステム)
Qt で FUSE を使用しようとしていますが、fuse_main() と app.exec() には独自のイベント ループがあります。これは、以下に示すように、一方を開始すると他方が開始されないため、一方を開始すると他方が開始されないことを意味します。これに対処する方法は?
ヒューズの詳細については、http://fuse.sourceforge.net/ にアクセスしてください。
可能であれば、例を提供してください。
ありがとう、レアンドロ。
例:
これにより、ヒューズの開始が妨げられます。
これにより、qtの起動が妨げられます。
c - execve()によって渡された不明なopen()フラグ
FUSEファイルシステムにあるbashスクリプトを実行するopen()
と、次のフラグを使用して呼び出しが行われます。
フラグ(0100040
)は、のパラメータ2で渡されたフラグに対応している必要がありますopen()
。不明なフラグは、次のexecve()
呼び出しから発生します。
私のコードはを認識#define O_LARGEFILE 00100000
しますが、他のフラグexecve()
はが呼び出されたときにのみ発生するように見えます。
旗を探しても見つかりません:
ほとんどの場合、ターミナルフラグが見つかります。この旗の起源と意味を追跡する方法、またはその定義をどこで見つけるかについて、誰かが光を当てることができますか?
windows - Windows で仮想ファイルを作成することはできますか? (つまり、FUSE インターフェイス)
呼び出しを読み書きする機能を追加できる仮想ファイルを Windows で作成するのはどれくらい難しいですか?
たとえば、理想的には、ファイルを作成してからイベントハンドラーをアタッチして、ファイルが読み取られるたびに読み取り呼び出しがブロックされ、コードが実行されてデータがフェッチされ、そのデータがファイルに取り込まれ、データがに送信されます。読み取りを要求するプログラム。
私の理解では、これは FUSE の動作に近いですが、Windows には FUSE の実装がないようです。それを行う方法があれば、オープン/読み取り/書き込みをキャプチャするだけで十分です。
spring - OSGi バンドルの Spring コンテキストにアクセスする
bundle-context.xml ファイルを使用して Bean を初期化する OSGi バンドルがあります。
Bean インスタンスを取得する必要があるファクトリ クラスがあります。非 OSGI の世界では、コンテキストを初期化し、Bean へのハンドルを取得するために、常に次のようにしています...
ただし、OSGI (FuseESB 4.2、Servicemix4) では、コンテナーが bundle-context.xml ファイルを自動的に読み込み、Spring コンテキストを初期化します。(上記のコードを使用して) コンテキストを明示的に読み込むと、2 つのコンテキストが作成されます (これは悪いことです)。では、同じコンテキスト/Bean へのハンドルを取得する適切な方法は何ですか?
python - FUSE および IMAP を含むファイル名
Python で IMAP4 を使用して fuse-filesystem を構築したいと考えています。ファイル名として、各メールの件名を使用したいと思います。したがって、ファイル名の名前を変更し、これでサブジェクトを変更できます。
ただし、サブジェクトは 1 つのディレクトリで複数回使用できるため、これは一般的なファイルシステムの規則に違反します。難しいディレクトリ システム (ここ
の
ようなもの) や一意のメッセージ ID (ファイルやディレクトリの名前を変更できない) は使いたくありません。
imap で電子メールを (fuse-) ディレクトリとして使用し、これらのメールの添付ファイルを (fuse-) ファイルとして使用したいと考えています。(そのため、ディレクトリの層は 1 つだけ可能です。) この imapfs の意図は、ストレージの可能性としてメールを使用することです。
このファイル名の問題に対処する方法について何か提案はありますか? 刺激をありがとう。
c - Go からの FUSE のラッピング
FUSE を Go でラッピングして遊んでいます。しかし、私は対処方法に行き詰まっていますstruct fuse_operations
。type Operations C.struct_fuse_operations
メンバーが小文字であるため、宣言することによって操作構造体を公開することはできないようです。私の純粋な Go ソースは、とにかくメンバーを設定するために C-hackery を使用する必要があります。この場合の最初のエラーは、デフォルトのコピー コンストラクターに相当するように見える "getattr を設定できません" です。私の次の試みはGetAttr
、ReadLink
などを期待するインターフェイスを公開しC.struct_fuse_operations
、関数ポインターを生成して、指定されたインターフェイスを呼び出すクロージャーにバインドすることです。
これは私が持っているものです(コードの後に説明が続きます):
これにより、次のエラーが発生します。
のこれらのメンバーに何を渡せばよいかわかりませんC.struct_fuse_operations
。いくつかの場所で、C から Go コードに戻すことはできないという言及を見てきました。
可能であれば、どうすればよいですか?C.struct_fuse_operations
対応するメンバーが NULL に設定されているかのように機能するインターフェイス関数の "既定" 値を指定するにはどうすればよいですか?
c - ルートアクセスなしで(インストール用に)プロジェクトでlibfuseを使用しますか?FTPマウントとinotify/kqueue / FSEvents
アプリケーションで、リモートFTP(またはSFTPなど)の場所からディレクトリリストを表示できるようにしたいと思います。リモートディレクトリツリーでファイル/ディレクトリが変更された場合、アプリケーションは関連する変更でビューを更新する必要があります。
ツリー全体をトラバースするのは遅くて無駄なので、FSEvents(Linuxではinotify / kqueues)に沿って何かを使用したいのですが、明らかにこれらのライブラリはファイルシステムベースであり、FTPサーバーへの接続は同じではありませんマウントされたファイルシステムとして。
これらのライブラリを機能させるには、FTP / SFTPでバックアップされたファイルシステムをローカルマシンに実際にマウントしてから、このローカルマウントにFSEventStream(またはkqueueなど)をアタッチする必要があります。FUSEでこれができることは知っていますが、ユーザーが最初にインストールしなくてもFUSEを使用できる方法はありますか?つまり、libfuseとカーネルモジュールをシステムにコピーするためにインストーラーパッケージを実際に実行するプロセスをユーザーに行わなくても、(Mac)アプリケーションにバンドルしてマウントを作成できますか?それは存在すると仮定しますか、それともこれは私のアプリケーションディレクトリ内/dev/fuse
のパスの外に住むことができますか?/dev/
素敵なMacアプリケーションは簡単なドラッグアンドドロップでインストールされます。可能であれば、この方法を維持したいと思います。システムパスにインストールせずに、libfuseを直接使用できるかどうか(ファイルがアプリに含まれている場合)はわかりません。
または、ポーリングせずにFTP経由で変更を監視するためのその他の提案はありますか?
c - FUSE からのシステム コールのデバッグ
私は、sqliteを介してマッピングを行い、呼び出しを基になるファイルシステムに渡すFUSEファイルシステムを作成しています(bbfsの拡張の一部)。ファイルの作成を開始しようとすると、問題が発生し始めました。mknod を呼び出すと、ERANGE で返されます。strace の末尾は次のとおりです (ファイルシステムは test/ にマウントされています)。
そして、ここに私の内部ログからの関連セクションがあります:
私は (1) この差し迫った問題の解決策と (2) FUSE 全般をデバッグする良い方法を探しています。ERANGE が strtol() から来ているのではないかとこっそり疑っていますが、確認方法がわかりません。コールバックにヒットしたときに gdb をポップアップさせることができたらいいのにと思います...
ありがとう!
編集:ああ、これが私の mknod() 関数のソースです: