問題タブ [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 の問題
でファイルシステムを作成しましたがFUSE、すべてがシングルスレッドモード(-sフラグ)で期待どおりに機能します。
通常のスレッド モードでopen()thenを発行するread()と、操作は機能しますが、ファイル システムがハングしているように見えます。フォアグラウンドで実行し、ctrl-c何もしません。ただし、 のような安定した操作を実行すると、問題なくlsシャットダウンできます。FUSEctrl-c
この問題をデバッグする方法はありますか、またはバグを探し始める場所を知っている人はいますか?
java - Java で FUSE ライブラリを使用する。hello.c の例を複製しようとしています
JNAを使用して FUSE ライブラリへのバインディングを作成しようとしていますが、途中で問題が発生しました。ここで消化できるように、コードを可能な限り最小化しました。
FUSE ライブラリには、C で記述されたサンプル ファイルシステムがいくつか付属していますhello.c。以下は、ファイルシステム関数でいくつかの出力を単純化するためにそのコードを最小化したバージョンです。
hello.c:
これは、次を使用してコンパイルできます。gcc -Wall hello.c -o hello -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -pthread -lfuse -lrt -ldl
そして、で呼び出されます./hello.c -f /some/mount/point
フラグは、が機能-fしていることを確認できるように、フォアグラウンドにとどまるためのものですprintf()。
printf()これはすべて正常に機能し、 が適切に実行されていることがわかります。JNAを使用してJavaで同じことを複製しようとしています。これが私が思いついたものです:
FuseTemp.java:
構造体の定義はfuse_operationsここにあります。
これは、次を使用してコンパイルできます。javac -cp path/to/jna.jar FuseTemp.java
そして、を使用して呼び出されますjava -cp path/to/jna.jar:. FuseTemp
表示されるエラーは次のとおりfusermount: failed to access mountpoint /some/mount/point: Permission deniedです。
同じマウントポイントフォルダーで同じ権限を持つ同じユーザーとして両方のプログラムを実行しており、fuseグループに属しています。私は使っている:
- Linux カーネル 3.0.0
- ヒューズ 2.8.4
- OpenJDK 1.6.0_23
- JNA 3.4.0
私の質問は、これら 2 つのプログラム (hello.cとFuseTemp.java) の正確な違いは何ですか? また、同じことを行うにはどうすればよいですか?
前もって感謝します。
編集:ここにいくつかの追加情報があります。
マウントポイントの頭文字stat:
通常のユーザーとして Java プログラムを実行すると、次の出力が得られます。
この後、実行しようとするとstat、次のエラー メッセージが表示されます。
stat: cannot stat/some/mount/point': トランスポート エンドポイントが接続されていません`
これは、Java プログラムがもう実行されていないためです。そのため、fuse はそのコールバックを呼び出すことができません。アンマウントするには、試してみるとfusermount -u /some/mount/point、次のようになります。
そして、試してみるsudo fusermount -u /some/mount/pointと、マウントポイントは正常にアンマウントされ、からの出力はありませんfusermount。/etc/mtabchmod'd 644 ( -rw-r--r--) であるため、ユーザーはそれを読むことができますが、含まれていません/some/mount/point。アンマウントが成功すると、マウントポイントは以前のアクセス許可 (777 ディレクトリ) に戻ります。
ここで、root として Java プログラムを実行します。
その後、stating/some/mount/pointは変更されていないことを示します。つまり、まだ 777 ディレクトリです。
また、すべての s をs ではなくs としてFuseTemp.java含めるように書き直しました。ただし、動作は同じです。CallbackCallbackPointer
ヒューズのソース コードを調べたところ、実行中の複数の時点でエラー コード 1 が返される可能性があります。ヒューズ側のどこが故障しているかを正確に特定し、ここに報告します。
現在、hello.c通常のユーザーとして実行し、同じ権限で開始し、引数と/some/mount/pointを渡すと、プログラムは最初は出力を出力しませんが、実行を続けます。マウントポイントで実行すると、プログラムは出力します-f/some/mount/pointstat
あるべきように。statはエラーを返しますが、それは単にhello.cのgetattr関数が情報を提供しないためであり、問題はありません。通常のユーザーとして実行した後fusermount -u /some/mount/point、プログラムはリターン コード 0 で終了し、アンマウントは成功します。
root として実行し、同じパーミッション on から開始して引数and/some/mount/pointを渡すと、プログラムは最初は出力を出力しませんが、実行を続けます。マウントポイントで実行すると、root ではないため、権限エラーが発生します。ルートとして実行すると、プログラムは出力します-f/some/mount/pointstatstat
あるべきように。fusermount -u /some/mount/point通常のユーザーとして実行する
root として実行fusermountすると、プログラムはリターン コード 0 で終了し、アンマウントは成功します。
fuse - libfuse:fuse_session_loopを終了します
コンテキスト:Ubuntu11.10およびlibfuse2.8.4-1.4ubuntu1 Linux 3.0.0-14-generic#23-Ubuntu SMP Mon Nov 21 20:28:43 UTC 2011 x86_64 x86_64 x86_64 GNU / Linux
libfuseを使おうとしています。(シグナルハンドラーまたは別のスレッドから)fuse_session_loopを終了させたいのですが、fuse_session_exitを呼び出すと、セッションが新しい要求を受信するまで何も起こりません。
Fuse_session_exitは、fuse_session_exitedによって読み取られるフラグを設定します。Fuse_session_loopにデバッグすると、fuse_chan_recvでブロックされているように見えるため、ループの先頭まで、fuse_session_exitedを再度チェックしません...
Fuse_chan_recvは、「/ dev /fuse」デバイスの「読み取り」システムコールをブロックするfuse_kern_chan_receiveを呼び出すため、fuse_session_exitedフラグが設定されていても、まだ何も起こりません。
この問題は、libfuseで提供されているhello_ll.cの例と私のプログラムに影響を与えているようです。おそらく、機能していないはずのメカニズムがあるのではないかと思います。おそらく、fuse_session_exitは、読み取り呼び出しを中断する何かを実行しているはずです。これは、何らかの理由で私のシステムで機能していません。
何か案は?
linux - インメモリ FUSE ファイルシステム
メモリに保存される単純な FUSE ファイルシステムを記述します。ファイルシステムは、次のコマンドをサポートする必要があります。
ls、mkdir、cp
この質問は最近インタビューで聞かれましたが、私は答えることができませんでした。だから私はそれを学ぶことにしました。
いくつかの検索を行い、独自の FUSE ファイルシステムの構築に関するガイドを見つけました。ファイルシステムをメモリに実装する方法について、私は本当に無知です。
私の質問は
- 私は正しい方向に向かっていますか?
- 他に何を読むべきですか?
- 解決策は何ですか?
私が読んでいるリンク:
- http://fuse.sourceforge.net/
- http://www.ibm.com/developerworks/linux/library/l-fuse/
- http://pramode.net/articles/lfy/fuse/pramode.html
- http://revista.python.org.ar/3/en/html/python_en_tu_fs.html
- http://pysnippet.blogspot.com/2009/11/fuse-filesystem-in-userspace-part-1.html
- FUSEを使用してPythonで一時ファイルを作成する
- http://www.willmcgugan.com/blog/tech/2011/3/20/creating-a-virtual-filesystem-with-python-and-why-you-need-one/
最後のリンクには、PyFileSystemを使用したメモリ内キャッシュに関する言及があります。それがどのように役立つかはわかりません。
PS : これは筆記面接の質問なので、答えは 10 ~ 15 分以内に紙に書き込めるほどシンプルなものにする必要があります。
android - ルート権限を取得されていないデバイス上のAndroidユーザースペースファイルシステムドライバー?
利用可能な標準のユーティリティを使用して、ルート化されていないファクトリデバイスで実行できるカスタムユーザースペースファイルシステムを作成できますか?
私はfuse-androidの存在を知っていますが、私が理解している限り、それはルート化されたデバイスを必要とします。そうでない場合は、私を訂正してください。
私が達成しようとしている目標は、実際にファイルにマウントされる「偽の」FSを作成することです。
emacs - sshfs 経由でファイルを保存しようとすると、emacs が警告を表示する
sshfsファイルシステムをマウントします
次に、このファイルシステムの下のファイルを次のように編集します
ファイルを保存すると、警告が表示されます
他のエディタにはこの問題はありません。これは何が原因ですか?どうすれば防ぐことができますか?両方のホストで ntp が実行されており、時間は同じです。
ティア。
PS私はtrampでファイルを直接開くことができることを認識していますが、ファイルを保存しようとするたびにこの警告を取り除くことができると仮定すると、sshfsを好みます。
android - ファイルセキュリティアンドロイド:自分のアンドロイドアプリケーションだけが読み取るファイルを作成するにはどうすればよいですか
Android デバイスの SD カードに一連の暗号化されたファイルがあります。私のアプリケーションは、bufferedInputstream を使用して暗号化されたファイルを読み取り、アプリケーションの内部ストレージに復号化されたファイルを生成します。次に、アプリケーションは復号化されたファイル (.pdf、.swf、.flv) を読み取って表示します。ユーザー (root 化されたデバイスの root ユーザーを含む) が復号化されたファイルにアクセスできないようにするにはどうすればよいですか?
- アプリケーションでファイルを開いて読み取るとすぐに、復号化されたファイルの読み取り/書き込み権限を削除できますか? はいの場合、どのように私を案内してください?
- アプリケーションがファイルを開いて読み取るとすぐに、内部ストレージからファイルを削除できますか? はいの場合は、私を案内してくださいどのように?
- https://github.com/seth-hg/fuse-androidに出くわしました。他に何も機能しない場合、そのようなケースを処理するためにユーザー空間にファイル システムを構築することは良い考えですか? 試した場合は、正しい方向またはチュートリアルを教えてください。
android - 変更されたandroid-fuseをndk-buildでビルドできません
ndk-buildでコンパイルしているときに、次のエラーが発生します。
変更したfusexmp.cを次のように変更しました。
c - ヒューズにスレッドを正しく追加する方法
FUSE に基づくファイル システム プロジェクトに取り組んでいます。そして、ある種の先読みを追加したいと思います。ということで、スレッドを作って処理をさせているのですが、思ったより遅くなってしまったようです。ヒューズを使用しないサーバープログラムにこの関数を追加したとき)
単純に fuse_main 関数を使用するのではなく、sshfs のコードを読み取り、次の関数を使用して自分で初期化しようとしました。
スレッドを追加しなくても、かなりうまく動作しますが、このスレッドを追加した後
遅くなります(100Mファイルを読み取り、このスレッドがなければ40秒で、それがあると100秒近くになります)
これは schedparam または何か他のことについて何かしますか? 確認すべき点など、アドバイスをいただければ幸いです。
再度、感謝します。
java - / usr / bin / ld:jniプロジェクトのコンパイル中に-ljvm:が見つかりません
私はjniプロジェクトをコンパイルしています。これが私が遭遇した問題の詳細です:r
そして、libjvm.soがすでに/usr/libに存在しているため、私は直接confファイル/etc/ld.so.conf.d/my.confを作成します。
次に、コマンドldconfigを使用します。しかし残念ながら、私はまだ同じ問題に直面しています。任意のアイデア?thx