タグ付けされた質問 「posix」

POSIX(Portable Operating System Interface)は、プログラミングAPI、コマンドインタープリター、およびUnixライクなオペレーティングシステム用の一般的なユーティリティを定義する一連の標準です。

4
ファイルの追加はUNIXでアトミックですか?
一般に、複数のプロセスからUNIXのファイルに追加する場合、何を当然と見なすことができますか?データを失う可能性はありますか(1つのプロセスが他のプロセスの変更を上書きします)?データが壊れる可能性はありますか?(たとえば、各プロセスが追加ごとに1行をログファイルに追加していますが、2行が破損する可能性はありますか?)上記の意味で追加がアトミックでない場合、相互排除を保証する最良の方法は何ですか?

6
SIGINTは、SIGTERM、SIGQUIT、SIGKILLなどの他の終了信号とどのように関連していますか?
POSIXシステムでは、終了信号は通常次の順序になります(多くのMANページとPOSIX仕様による)。 SIGTERM-プロセスに終了を丁寧に要求します。正常に終了し、すべてのリソース(ファイル、ソケット、子プロセスなど)をクリーンアップし、一時ファイルを削除します。 SIGQUIT-より強力なリクエスト。クリーンアップが絶対に必要なリソースをクリーンアップしますが、一時ファイルは削除せず、デバッグ情報をどこかに書き込む可能性があります。一部のシステムでは、コアダンプが書き込まれます(信号がアプリによってキャッチされるかどうかに関係なく)。 SIGKILL-最も強力なリクエスト。プロセスは何もするように要求されることさえありませんが、システムはそれが好きかどうかに関わらず、プロセスをクリーンアップします。おそらくコアダンプが書き込まれます。 SIGINTはどのようにその画像に適合しますか?CLIプロセスは通常、ユーザーがCRTL + Cを押すとSIGINTによって終了しますが、バックグラウンドプロセスは、KILLユーティリティを使用してSIGINTによって終了することもできます。仕様またはヘッダーファイルで確認できないのは、SIGINTがSIGTERMよりも強いか弱いか、またはSIGINTとSIGTERMの間にまったく違いがあるかどうかです。 更新: 私がこれまでに見つけた終了信号の最も良い説明は、GNU LibC Documentationにあります。これは、SIGTERMとSIGQUITの間に意図された違いがあることを非常によく説明しています。 それはSIGTERMについて言います: これは、プログラムに終了を丁寧に要求する通常の方法です。 そしてそれはSIGQUITについて述べています: [...]プログラムエラー信号のように、プロセスを終了するとコアダンプを生成します。これは、ユーザーによって「検出」されたプログラムエラー状態と考えることができます。[...]特定の種類のクリーンアップは、SIGQUITの処理では省略されるのが最適です。たとえば、プログラムが一時ファイルを作成する場合、一時ファイルを削除することにより、他の終了要求を処理する必要があります。ただし、SIGQUITはそれらを削除しない方がよいため、ユーザーはコアダンプと組み合わせてそれらを調べることができます。 そしてSIGHUPも十分に説明されています。SIGHUPは実際には終了信号ではなく、単にユーザーへの「接続」が失われたことを意味するため、アプリはユーザーがそれ以上の出力(例:stdout / stderr出力)を読み取ることを期待できず、期待される入力がありません。もはやユーザー。ほとんどのアプリでは、終了することを意味します。理論的には、SIGHUPを受信すると、アプリがデーモンモードになり、バックグラウンドプロセスとして実行され、設定されたログファイルに出力が書き込まれるようにアプリを決定することもできます。すでにバックグラウンドで実行されているほとんどのデーモンの場合、SIGHUPは通常、構成ファイルを再検査する必要があることを意味するため、構成ファイルを編集した後、デーモンをバックグラウンドプロセスに送信します。 ただし、このページには、CRTL + Cから送信されるSIGINTに関する有用な説明はありません。SIGINTをSIGTERMとは異なる方法で処理する理由はありますか?もしそうなら、これはどのような理由であり、処理はどのように異なるのでしょうか?
103 linux  unix  posix 




7
POSIXファイル記述子からc ++ fstreamを構築する方法は?
私は基本的にC ++バージョンのfdopen()を探しています。私はこれについて少し調査しましたが、それは簡単なはずのように見えますが、非常に複雑であることがわかりました。私はこの信念に何か欠けていますか(つまり、本当に簡単です)?そうでない場合、これを処理するための良いライブラリがどこかにありますか? 編集:サンプルソリューションを別の回答に移動しました。

4
POSIX非同期I / O(AIO)のステータスは何ですか?
POSIX AIOファシリティをさまざまな詳細で説明するページがWebに散在しています。それらのどれもひどく最近です。彼らが何を説明しているのか、正確には明確ではありません。たとえば、Linuxカーネル非同期I / Oサポートの「公式」(?)Webサイトには、ソケットが機能しないと記載されていますが、Ubuntu 8.04.1ワークステーションの「aio.h」マニュアルページはすべて、任意のファイル記述子で機能します。次に、さらに少ないドキュメントでライブラリレイヤーで動作するように見える別のプロジェクトがあります。 知りたい: POSIX AIOの目的は何ですか?私が見つけることができる実装の最も明白な例は、それがソケットをサポートしていないと言っていることを考えると、全体が奇妙に思えます。非同期ディスクI / O専用ですか?もしそうなら、なぜハイパージェネラルAPIなのか?そうでない場合、なぜディスクI / Oが最初に攻撃されたのですか? 私が見ることができる完全な POSIX AIOプログラムの例はどこにありますか? 実際に誰かが実際に使用していますか? どのプラットフォームがPOSIX AIOをサポートしていますか?それらのどの部分をサポートしていますか?<aio.h>約束されているように見える暗黙の「任意のFDへのI / O」を本当にサポートしている人はいますか? 私が利用できる他の多重化メカニズムは完全に優れていますが、あちこちに浮かんでいるランダムな情報の断片が私を好奇心をそそられました。
93 linux  asynchronous  posix  bsd  aio 

5
なぜSIGPIPEが存在するのですか?
私の理解からは、SIGPIPE唯一の結果として発生する可能性がありwrite()、そのことができます(とし)リターン-1とセットerrnoにEPIPE...私たちは信号の余分なオーバーヘッドを持っていますだから、なぜ?パイプを使用するたびに無視SIGPIPEし、結果として痛みを感じたことはありませんが、何か不足していますか?
92 posix 

7
年と月(「yyyy-mm」形式)を日付に変換しますか?
次のようなデータセットがあります。 Month count 2009-01 12 2009-02 310 2009-03 2379 2009-04 234 2009-05 14 2009-08 1 2009-09 34 2009-10 2386 データをプロットしたい(月をx値として、カウントをy値として)。データにギャップがあるため、今月の情報を日付に変換したい。私は試した: as.Date("2009-03", "%Y-%m") しかし、それはうまくいきませんでした。どうしましたか?as.Date()も1日を必要とし、その日の標準値を設定できないようです。問題を解決するのはどの機能ですか?
91 r  date  posix  zoo  r-faq 

15
fork()の目的は何ですか?
Linuxの多くのプログラムやマニュアルページで、を使用しfork()たコードを見てきました。なぜ使用する必要fork()があり、その目的は何ですか?
87 c  unix  posix  fork 



5
snprintf()は常にnullで終了しますか?
snprintfは常にnullで宛先バッファを終了しますか? 言い換えれば、これで十分ですか? char dst[10]; snprintf(dst, sizeof (dst), "blah %s", somestr); または、somestrが十分に長い場合は、このようにする必要がありますか? char dst[10]; somestr[sizeof (dst) - 1] = '\0'; snprintf(dst, sizeof (dst) - 1, "blah %s", somestr); 私は、標準が何を言っているのか、そして標準的な振る舞いではないいくつかの人気のあるlibcが何をするのかということに興味があります。
85 c  posix  libc 

4
System VIPCとPOSIXIPC
違いは何ですかSystem V IPCとはPOSIX IPC? なぜ2つの基準があるのですか? 使用するIPC機能を決定する方法は?
83 posix  ipc  sysv 

1
Cコードのtimespec_get()の秒コンポーネントの1秒遅れてtime()が報告する時間がなぜですか?
次のコードスニペット: struct timespec ts; for (int x = 0; x < 100000000; x++) { timespec_get(&ts, TIME_UTC); long cTime = (long) time(NULL); if (cTime != ts.tv_sec && ts.tv_nsec < 3000000) { printf("cTime: %ld\n", cTime); printf("ts.tv_sec: %ld\n", ts.tv_sec); printf("ts.tv_nsec: %ld\n", ts.tv_nsec); } } この出力を生成します: ... cTime: 1579268059 ts.tv_sec: 1579268060 ts.tv_nsec: 2527419 cTime: …
12 c  time  posix  timespec 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.