問題タブ [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.
linux - Linuxにサブフォルダが存在するかどうかを確認する
Linuxで、子を反復処理せずにフォルダーにサブフォルダーがあるかどうかを確認しようとしています。私がこれまでに見つけた最も近いものはftw
、最初のサブフォルダーを使用して停止するかscandir
、結果を使用してフィルタリングすることです。ただし、どちらも私の目的にはやり過ぎです。単に「はい/いいえ」が必要です。
Windowsでは、これは、返された構造を呼び出しSHGetFileInfo
てテストすることによって行われます。dwAttributes & SFGAO_HASSUBFOLDER
Linuxにそのようなオプションはありますか?
c - waitpidは、すでに終了している子プロセスの有効なステータス情報を生成しますか?
私が子fork
プロセスであり、親が呼び出す前に子プロセスが終了した場合waitpid
、によって設定された終了ステータス情報はwaitpid
まだ有効ですか?もしそうなら、それはいつ無効になりますか。つまり、waitpid
子pidを呼び出して、任意の時間が経過した後も有効な終了ステータス情報を取得し続けることができるようにするにはどうすればよいですか。また、「クリーンアップ」するにはどうすればよいですか(終了に関心がなくなったことをOSに通知します)。終了した子プロセスのステータス情報)?
次のコードで遊んでいたところ、終了ステータス情報は子が終了してから少なくとも数秒間は有効であるように見えますが、OSに通知する期間や方法がわかりません。waitpid
再度呼び出す:
c - EAGAINの後に読み取りを強制的にブロックしますか?
読み取り用に開いているファイル記述子がありますが、これは非ブロッキングである可能性があります。私がする必要があるのは、EOFに達するまですべてのデータを読み取り、そのデータを書き込み可能なファイル記述子に書き込むことです。このコピーを実行するプロセスは、周囲で何が起こっているかを「認識」していないため、データを待っている間は何か便利なことができるとは思いません。また、while
ループを使用したくerrno
ありません( EAGAIN
)無駄だと思うので。データが利用可能になるまで、コピープロセスの実行をブロックまたは一時停止する方法はありますか?
c - 大きなファイルを書き込むためだけに O_LARGEFILE が必要ですか?
大きなファイルの書き込み ( ) または大きなファイルへの追加( ) だけを行う場合、O_LARGEFILE
フラグは必要ですか?O_WRONLY
O_APPEND | O_WRONLY
私が読んだCLucene-dev メーリング リストの「 Cannot write >2gb index fileO_LARGEFILE
」というタイトルのスレッドから、大きなファイルを書き込む必要があるようですが、その議論の参加者はO_RDWR
ではなくを使用しているO_WRONLY
ため、よくわかりません。
c - O_NONBLOCK は、ファイル記述子または基になるファイルのプロパティに設定されていますか?
fcntl
、open
、read
、およびの The Open Group Web サイトで読んだことから、 がファイル記述子に設定されているかどうか、したがって、非ブロッキング I/O が記述子で使用されているかどうかは、 のプロパティである必要があるというwrite
印象を受けました。O_NONBLOCK
基になるファイルではなく、そのファイル記述子。ファイル記述子のプロパティであるということは、たとえば、ファイル記述子を複製するか、同じファイルに対して別の記述子を開く場合、一方にはブロッキング I/O を使用し、もう一方には非ブロッキング I/O を使用できることを意味します。
ただし、FIFO を試してみると、FIFO に対してブロッキング I/O 記述子と非ブロッキング I/O 記述子を同時に持つことはできないようです (したがって、O_NONBLOCK
設定されているかどうかは、基になるファイル [FIFO] のプロパティです)。 ):
これは私に考えさせます:ノンブロッキングI/O記述子とブロッキングI/O記述子を同じファイルに持つことは可能ですか?もしそうなら、それはファイルのタイプ(通常のファイル、FIFO、ブロック特殊ファイル)に依存しますか? 、キャラクタースペシャルファイル、ソケットなど)?
c - このフラグのないシステムで O_NOFOLLOW をシミュレートする良い方法は何ですか?
をサポートしていないシステムでopen
安全にシミュレートできるようにしたいと考えO_CREAT | O_WRONLY | O_TRUNC | O_NOFOLLOW
ています。私が求めていることをある程度達成することができます:O_CREAT | O_WRONLY | O_APPEND | O_NOFOLLOW
O_NOFOLLOW
しかし、競合状態が発生し、セキュリティ上の問題が発生する可能性があります。
touch
ユーザーだけが書き込むことができるダミーファイルを作成することを考えましたingのようなものでfilename
、lstat
チェックを行い、chmod
書き込みが終了した後に使用します(ファイルモードビットを修正するため)が、何か大きなものを見落とす可能性があります(たとえば、ファイルがfilename
存在する場合、通常のファイルではない場合、または既にシンボリック リンクである場合)。
どう思いますか?
c - ターゲット フォルダーの変更後の POSIX seekdir() および telldir() の動作
次のタスクを検討してください。
1) ターゲット ディレクトリの内容を読み取り、見つかった各 dirent 構造をいくつかのフィルター関数に渡し、後で処理するためにフィルター処理された要素を何らかの方法で記憶します。
2) しばらくして、フィルタリングされた要素を反復処理し、それらを処理します (何らかの I/O を実行します)。
最も明白な方法は、サブディレクトリの名前を保存することです。
ただし、メモリ使用量を最小限に抑え、追加の I/O を回避したいと考えています。
POSIX マニュアルによると、telldir() を使用して各ディレクトリ エントリの位置を保存し、後で seekdir() を使用してそれらを復元できます。これらの位置を有効に保つには、ターゲット ディレクトリを開いたままにし、rewinddir() 呼び出しを使用しないようにする必要があります。
ディレクトリストリームを開いたままにして、ディレクトリ位置のリスト(long int`s)を保存することが適切な解決策のようです。
ただし、フォルダーの変更後に保存された位置が有効なままかどうかは不明です。POSIX 標準では、これらの条件に関するコメントは見つかりませんでした。
- 1) 新しいディレクトリ エントリのみが追加/削除されたときに、保存された位置が有効なままかどうか。
- 2) フィルタリングされたディレクトリ エントリの一部が削除された場合に、変更されていないディレクトリ エントリの格納位置が有効なままかどうか。
- 3) フォルダーの変更後、保存された位置が別のディレクトリ エントリを指すことは可能ですか?
特定のシステムについてこれらの質問に対する答えをテストして見つけるのは簡単ですが、このトピックに関する標準の内容を知りたいです
ありがとうございました
c - ファイル記述子用の「fprintf」のような関数 (つまり、FILE* fp の代わりに int fd)
たぶん私はそれを見逃しているだけかもしれませんが、ファイル記述子の fprintf に相当する関数、またはそれらの間で一時的にフリップフロップする方法さえありませんか?
events - POSIX 環境でグローバルなシグナル可能イベントを実装するための移植可能な良い方法は何ですか?
使用例は、1 つのアプリケーションがイベントを生成し、リッスンするアプリケーションが取得するシグナルを送信することです。たとえば、アプリケーションはファイルの内容を更新し、これを通知します。Linux では、ウェイターがファイルに対して inotify を呼び出すことでこれを行うことができます。可搬性のある方法の 1 つは、リスナーがよく知られているサーバーに登録することですが、可能であれば、もっと単純なものを希望します。理想的には、可能な限り移植性があるということは、広く利用可能な POSIX 機能のみを使用することを意味します。
windows - MicrosoftWindowsの7POSIX実装は現在どこにありますか?
Windows 7で/用に利用できる完全なPOSIX実装はありますか(UNIX用のWindowsサービスを考えています)?
OSのすべてのバージョンで利用できますか(そうではないようです)?
以前のMSWindowsPOSIX実装をどのように追加/改善または中断しますか?
Windows 7でのPOSIX準拠に関する特定のMicrosoftのアプローチと実装に関する詳細情報はどこにありますか?