問題タブ [posix-api]
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.
java - Linux JVM 上のオブジェクトの固有ロック
「すべてのオブジェクトには固有のロックが関連付けられている」ことを学びました。
また、Linux では、JVM がマルチスレッド機能に POSIX API を内部的に使用していることも知りました。
JVM がクラスの各オブジェクト インスタンスに固有のロックを提供 (作成) するために使用する POSIX API の名前は何ですか?
c++ - Linux の C で poll() をすぐに終了させるにはどうすればよいですか?
ファイルが変更されたときにイベントを取得するために、関数poll() (POSIX の一部であると思いますか?) を C++ クラスで使用しています。これは問題なく動作するようですが、スレッドを閉じる必要があるときに関数をすぐに終了できるようにしたいと考えています。
私はこれを調査し、試してみたいくつかのアイデアを思いつきました-信号を送信しようとするなど、これを機能させる方法を理解できませんでした.
以下のコード (100% 完全ではありませんが、問題を説明するのに十分なはずです) には、コンストラクターからスレッドを開始し、そのスレッドをデストラクターでクリーンアップしたい C++ クラスがあります。スレッドは、ファイルが変更されたときに返されるpoll()を呼び出し、デリゲート オブジェクトに通知します。監視スレッドは、FileMonitorオブジェクトが (bool を返すメソッドを使用して) 終了できることを示すまでループします。
デストラクタでやりたいことは、bool を反転させてから、poll()をすぐに終了させる何かを実行してから、*pthread_join()* を呼び出すことです。では、 poll()をすぐに終了させる方法についてのアイデアはありますか?
このコードは Linux (特に debian) を対象としていますが、Mac でも作業しています。poll() API が基本的に同じように機能することが理想的です。
c++ - 一部のシステムで read() が誤った読み取りバイト数を返す
レガシー システムでのファイル読み取りの問題を解決しようとしています。
これは、同じ SP、SDK、および IDE がインストールされている Windows7/SP1/64 ビット システムでのみテストおよび実行される 32 ビット Windows アプリケーションです。IDE は VS2010/SP1 です。
問題のコードは次のとおりです。
ご覧のとおり、これは単純な古いダイレクト バイナリをいくつかの構造体に読み込む必要があります。私が観察できるのは、ファイルを作成し、最初に memset/Zeromem で構造体をクリアして、すべてのパディングバイトを 0xCC ではなく 0x00 で「初期化」することです (これは、デバッグモードで mem を非初期化としてタグ付けする Microsoft の方法です)。 stack mem) 以前は正しく動作しなかったシステムで問題が解消されます。
どうすれば問題を「適切に」解決できるかは明らかですが、 open() のように O_BINARY を指定します
なぜこれがこんなに違う振る舞いをするのか、私には何の手がかりもありません。両方のシステムで open() と read() のソースを調べてみましたが、問題を再現できる唯一のシステムにアクセスできることはめったにないため、まだ何も見つけることができませんでした。
したがって、私の質問は、誰かがなぜこれが起こるのかを指摘し、いくつかのドキュメントを参照できるかどうかです.
c - FreeBSD: _POSIX_C_SOURCE=200809L が定義された getpagesize の暗黙の宣言。
私は現在、ソフトウェア プロジェクトの OS 関連機能を Linux から FreeBSD に移植しています。これにより、 FreeBSD 10.1 で定義されているgetpagesize
if を使用して、次の問題を認識しました。_POSIX_C_SOURCE=200809L
小さなテストプログラムを作成しました
私がコンパイルする場合は使用しています
警告なしでコンパイルされます。しかし、定義すると(コードの他の部分で必要な関数_POSIX_C_SOURCE=200809L
の適切な POSIX 定義の結果)、次のようになります。getline
unistd.h
のマンページに記載されているように含めましたがgetpagesize
。まだ定義されている警告なしでコードをコンパイルするにはどうすればよい_POSIX_C_SOURCE
ですか?
c - タイマーはしばらくするとフリーズします
タイマーを実装する次のプログラムを実行しています。前の実行中のスレッドから条件変数のシグナルを受信した後にスレッドが起動すると、タイマーが作成され、タイマーの満了時に次のスレッドにシグナルが送信されます。しばらく実行したいのですが、数回実行するとタイマーが停止します。
printf ステートメントが実行されていないのに、しばらくするとフリーズするのはなぜですか? いいえ。タイマーの数が限られています。この問題を解決するには、他にどのような戦略を使用すればよいですか?
c - 同じソケットでの send/recv への並列呼び出しは、POSIX 標準に従って有効ですか?
並列スレッドでのソケット API ( recv
、send
、select
、など) の使用法を理解しようとしています。close
これは、2 つの並列スレッドで 1 つのソケット ファイル記述子を使用することを意味します。私はこの質問を経験しました。それでも、マルチスレッドでのソケット API の使用法を説明する標準ドキュメントを見つけることができません。opengroupの man ページでさえ、これについて何も語っていません。
また、以下にリストされている並列スレッドの使用シナリオが POSIX ソケット API で有効かどうかも知りたいです。
recv
1)およびsend
2 つの並列スレッドでの呼び出し
2) 2 つの並列スレッドでrecv
and send
withを呼び出すselect
3) 2 つの並列スレッドで, ,を使用してrecv
andsend
を呼び出すsetsockopt
ioctl
fcntl