問題タブ [fcntl]
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 - fcntl F_GETLK は常に true を返します
ロックファイルを使用して単一インスタンスのデーモンを作成しようとしていますがfcntl()
、期待どおりに動作しないようです...
したがって、-1 が返された場合は呼び出しget_lock_file_status
て終了し、他のインスタンスが実行されていないことを確認しcreat_lock_file
、デーモンを正常に作成した後に pid ファイルをクレートしてロックするために呼び出します...
コンパイルして実行すると、プログラムは期待どおりに動作し、ロック ファイルが作成されて pid が書き込まれますが、2 番目のインスタンスが開始されると、2 番目のインスタンスは単に同じロック ファイルを開いて独自の pid を書き込みます。
私は何を間違っていますか?2 番目のインスタンスは で -1 を返すべきではありませんget_lock_file_status
か?
c - OSX の fcntl(fd, F_SETLKW, ...) でプロセスがブロックされるのはなぜですか?
SQLite の新しい実験的機能は、ある時点でブロッキング posix ロックを使用します。OSX でのこの fcntl() 呼び出しでプロセスがブロックされるというテスト ケースがありますが、その理由がわかりません。同じテストが Linux でも機能しますが、これは幸運なタイミングかもしれません。
呼び出しは次のとおりです。
ここで、「f」は次のとおりです。
[lsof] によると、ファイルが開いているのは私のプロセスだけです。
ただし、fcntl() が最初に呼び出されたときに、他のプロセスが競合するロックを保持していた可能性があります。
gdb は fcntl() に渡されるファイル記述子が「10」であることを示しているので、有効だと思います。
私の質問は、他のプロセスがファイルを開いていない場合、なぜ fcntl() がブロックされるのでしょうか?
c - fcntl を使用したストレージの事前割り当てが期待どおりに機能しない
システムコールでストレージを事前に割り当てたいfcntl
。これを行うための私のコードは次のとおりです。
変数ret
は-1
、そのコードを実行した後ではありません。fstat
同じファイル ハンドルを呼び出してファイル サイズを取得すると、 stat.st_size = 0
. しかし、値store.fst_bytesalloc
は の値と同じですlength
。
どうすればいいですか?電話すると
穴のあるファイルを取得するのですか、それとも穴のない「実際の」ファイルですか? 2つ目は私の目標です。
c - stat.h ファイルへのアクセス ファイル記述子 open() ハッキング 悪用の技術
VM(virutalbox)を使用してJon Ericksonの「Hacking:The Art of Exploitation」の第2版を作成し、付属のLiveCD(Ubuntu 7.04)を実行しています。セクション 0x281「ファイル アクセス」では、82 ~ 84 ページの例を使用して、open() close() read() および write() 関数と同様に、ファイル記述子を介したファイルへのアクセスについて著者が説明しています。
simplenote.c のコードは次のとおりです。
ただし、本に記載されている次の指示を端末ウィンドウに入力すると、次のエラー メッセージが返されます。
sys/stat.h の 105 行目は次のとおりです。
そして、ここに bits/stat.h 行 63-83 があります:
これは、最初の一連の問題に役立つ可能性があると思います。
C++ システム ファイルの bits/stat.h が突然「エラー: フィールド 'st_atim' の型が不完全です」で壊れる
/usr/include/time.h
私の端末ウィンドウでは何もしません。
そして、ここに simplenote.c のメイン関数の 1 ~ 6 行目、34 ~ 35 行目があります。
オープン関数の問題は fcntl.h に起因すると思いますか?
作者が提供した不完全なコードが原因で、問題が発生し続けているようです。常にスタックオーバーフロー コミュニティの助けに頼りたくないので、今後これらの問題を調べて修正することについて、初心者にどのような提案がありますか?
ありがとう。