問題タブ [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 - 正常にロック解除されなかったファイル ロックを POSIX システムがクリアする順序は何ですか?
状態のPOSIX 仕様fcntl()
:
特定のプロセスのファイルに関連付けられているすべてのロックは、そのファイルのファイル記述子がそのプロセスによって閉じられたとき、またはそのファイル記述子を保持しているプロセスが終了したときに削除されます。
終了したプロセスによって保持されていたファイル セグメント ロックのロックを解除するこの操作は、ファイルごとにアトミックですか? つまり、プロセスがファイルのバイト セグメント B1..B2 および B3..B4 をロックしていたが、終了する前にセグメントのロックを解除しなかった場合、システムがそれらをロック解除しようとすると、セグメント B1..B2 および B3 になります。 .B4fcntl()
ファイルのセグメントをロックする別の操作が成功する前に両方のロックが解除されますか? ファイルごとにアトミックでない場合、これらのファイル セグメントがシステムによってロック解除される順序は、ファイル セグメントが最初に取得された順序に依存しますか?
の仕様には明記されfcntl()
ていませんが、おそらく POSIX 仕様には、プロセスがクリーンに終了しないかクラッシュした後にクリーンアップするための決定論的な順序を義務付ける一般規定が存在します。
python - 群れ、フォーク、および終了する親プロセスによるデッドロック
私はかなり複雑なPythonプログラムを持っています。内部的には、排他的(LOCK_EX
)を使用fcntl.flock
してグローバルロックを管理するロギングシステムがあります。事実上、ログメッセージがダンプされるたびに、グローバルファイルロックが取得され、メッセージがファイルに発行され(ロックファイルとは異なります)、グローバルファイルロックが解放されます。
プログラムはまた、(ログ管理が設定された後)それ自体を数回フォークします。一般的にすべてが機能します。
親プロセスが強制終了された場合(そして子が生きたままの場合)、デッドロックが発生することがあります。すべてのプログラムはfcntl.flock()
永久にブロックされます。外部でロックを取得しようとすると、永久にブロックされます。私は問題を解決するために子供たちのプログラムを殺さなければなりません。
しかし、困惑しているのはlsof lock_file
、ロックを保持するプロセスがないことです。そのため、ファイルがカーネルによってロックされている理由を理解できませんが、ファイルを保持していると報告されるプロセスはありません。
flock
フォークに問題がありますか?死んだ親は、プロセステーブルに存在しなくなったにもかかわらず、どういうわけかロックを保持していますか?この問題を解決するにはどうすればよいですか?
php - 数秒ごとに pcntl_signal_dispatch() を呼び出す PHP
ブロッキング モードでパイプから読み取る PHP スクリプトがあります。
スクリプトがパイプからの入力を待っている間、キューに入れられたパイプの読み取りを妨害することなく、pcntl_signal_dispatch を数秒ごとに実行できるようにしたいと考えています。
助言がありますか?
python - Pythonfcntlが期待どおりにロックされない
DebianベースのOS(Ubuntu、Debian Squeeze)では、Python(2.7、3.2)fcntlを使用してファイルをロックしています。私が読んだことから理解しているように、fnctl.flockはある意味でファイルをロックし、別のクライアントが同じファイルをロックしたい場合は例外がスローされることを理解しています。
最初にファイルをロックしてから、すぐにもう一度ロックしようとするので、ちょっとした例を作成しました。これは、例外をスローすることを期待しています。
ただし、この例では「エラーなし」と出力されます。
このコードを同時に実行している2つのクライアントに分割すると(1つはロックしてから待機し、もう1つは最初のロックがすでにアクティブになった後にロックしようとします)、同じ動作が得られます-まったく効果がありません。
この振る舞いの説明は何ですか?
編集:
ナイトクラッカーの要求に応じて変更すると、このバージョンでも「エラーなし」と出力されますが、次のことは予期していません。
python - Python fcntlモジュールはLinuxカーネルごとに異なりますか?
Pythonfcntlモジュールを使用してファイルシステムコールを介してロックを行うPythonスクリプトがあります。
このスクリプトは、Ubuntu10.10リリースで正常に機能します。
しかし、Centos 6.2ホストで同じスクリプトを実行すると、スクリプトは次のエラーで爆破します。
* AttributeError:'module'オブジェクトには属性'F_WRLCK'がありません*
実際のコードは次のとおりです。
Centosホストでは、スクリプトが最後の行を爆撃します。
なぜfcntlモジュールにはCentos6.2カーネルではF_WRLCK属性がないのに、Ubuntuではあるのですか?
参考までに、Ubuntu10.10とCentos6.2の両方でPython2.6.6が実行されています。
これに対する回避策または解決策はありますか?flockではなくfcntlを使用する必要があります。
c - popen を使用して開いているファイルを閉じることができません
私はC言語が初めてで、今日、popen関数を使用して作成された「オープンストリーム」を閉じようとしているときに問題に直面しています。1. この問題は、このプログラムで使用したポーリング機能が原因で発生していますか? 2. それとも fcntl 関数のためですか? 誰かがこの問題の正確な原因を教えてくれたら、とてもうれしいです。以下にコードサンプルを添付しますので、ご覧ください。
コードサンプル:
出力:
ここでは、実行の最後にプロンプトが表示されることを期待しています。しかし、それは来ていません。
python - Python - ioctl 番号は C ioctl 番号と異なる可能性がありますか?
私の知る限り、ioctl 番号はドライバーによって適切に定義され、カーネルに登録されています。
ジョイスティックの状態を照会するために、Python でいくつかのコードをいじっていました。ジョイスティック api に関するこのドキュメント、ioctl 番号に関するこのドキュメント、および python fcntl モジュールからのこのドキュメントを読みました。
値をテストおよびクエリするための C プログラムを作成しました。Python は、 C マクロを実装するためにここから取得したコードを使用してテストします。_IOR()
カーネル ドライバーの定義:
Cプログラム
C プログラムの出力:
Python 出力
その ioctl 番号でファイル記述子を照会できない理由はありますか? ioctl()
関数は、メソッドが実装されfcntl()
たファイル記述子またはオブジェクトを取るためfileno()
、オブジェクトからエラーを破棄しfile
ます。
数値変換と型に問題があるのかもしれませんが、わかりません...手がかりはありますか?
c++ - ev_default_forkに関するlibevのフラグ
私は学んでいlibev
ます。ev_default_fork
しかし、私はの旗について理解していませんev_loop
。これは、実行に近い問題ですか?旗のようにFD_CLOEXEC fcntl()
?フラグを設定する必要があるときは?このフラグが必要なのはどちらの場合ですか?これはドキュメントの説明です:
この関数は、後続のev_loop反復で、カーネル状態が1つあるバックエンドのカーネル状態を再初期化するフラグを設定します。名前にもかかわらず、いつでも呼び出すことができますが、子プロセス(または子と親の両方)でforkした後、最も意味がありますが、これもほとんど意味がありません。libevfunctionを使用する前に、子で呼び出す必要があります。これは、次のev_loopの反復でのみ有効になります。
一方、子でイベントライブラリを使用する場合にのみ、子プロセスでこの関数を呼び出す必要があります。fork + execだけの場合は、呼び出す必要はまったくありません。
関数自体は非常に高速であり、フォークの後で念のために呼び出すことは通常問題ではありません。これを簡単にするために、関数はpthread_atforkの呼び出しに完全に適合します。pthread_atfork(0、0、ev_default_fork);
c - CLONE_FILESを使用したclone(2)はfcntlロックをリークしますか?
すべてのclone()がロックを待つようにしたい。しかし、このコードの出力(このようなもの):
しかし、clone(2)からCLONE_FILESフィールドセットを削除すると、すべてうまくいきます。他のクローンスレッドはlock()を待ちます。
その出力:
他の選択肢(CLONE_FILESを使用)はありますか?そして、なぜこの種の行動なのか?
この分野の初心者。
linux - perl で O_ASYNC と fcntl を使用するには?
O_ASYNC オプションを使用したいのですが、パイプが読み取れると、SIGIO のハンドラーが実行されます。
しかし、次のコードは機能しません。誰でも私を助けることができますか?
私のperlバージョンは5.16.1、オペレーティングシステムはRedhat 5u4、カーネル2.6.18、x86_64です