JM プロジェクトは、主に Linux 関連のマニュアルページの日本語ページを翻訳・公開しています。
... open (2) された場合、ファイルオフセットは書き込み前に ファイルの末尾に設定される。 ファイルオフセットの調整と書き込み操作はアトミックな処理として 実行される。 POSIX は write () が行なわれた後に実行した read (2) が 新しいデータを返すことを要求している。 全て ... ると、 以下のすべての関数では、 通常ファイルもしくはシンボリックリンクに対する操作では POSIX.1-2008 で規定された効果が互いにアトミックに行われなければならない: ... この後に書かれている API の中に write () と writev (2) である。 スレッド(やプロセス) 間でアト ... 共有する 2 つのプロセスが同時に write () (や writev (2)) を実行した場合、 この I/O 操作ではファイルオフセットの更新に関してはアトミックではなく、 2 つのプロセスから出力されるデータブロックが (間違って) 重なる可能性がある。 この問題は Linux 3.14 で修正された。 ... ... ると、 以下のすべての関数では、 通常ファイルもしくはシンボリックリンクに対する操作では POSIX.1-2008 で規定された効果が互いにアトミックに行われなければならない: ... この後に書かれている API の中に read () と readv (2) である。 スレッド(やプロセス) 間でアトミ ... を共有する 2 つのプロセスが同時に read () (や readv (2)) を実行した場合、 この I/O 操作ではファイルオフセットの更新に関してはアトミックではなく、 2 つのプロセスの read で取得されるデータブロックが (間違って) 重なる可能性がある。 この問題は Linux 3.14 で修正さ ... ... として ~/sfdisk-<devname>.move を使うことになる。このログは、v2.35 以来、作成がユーザの任意になった。 この操作は危険であり、アトミックでもないことに注意していただきたい。 だから、 データのバックアップを取ることを忘れてはいけない! --move-use-fsync もご覧いただ ... ... ってそのファイルディスクリプターをクローズしてから再利用する。 ファイルディスクリプター newfd をクローズして再利用する処理は アトミック(不可分)に 実行される。これは重要な点である。 なぜなら、 等価な機能を close (2) と dup () を使って実装しようとすると、 2 つ ... ことを意味する。 */ tmpfd = dup(newfd); if (tmpfd == -1 && errno != EBADF) { /* 予期しない dup() のエラーを処理する */ } /* アトミックに 'oldfd' を 'newfd' に複製する */ if (dup2(oldfd, newfd) == -1) { /* dup2() のエラーを処理する */ } /* ここでもともと 'new ... ... ってそのファイルディスクリプターをクローズしてから再利用する。 ファイルディスクリプター newfd をクローズして再利用する処理は アトミック(不可分)に 実行される。これは重要な点である。 なぜなら、 等価な機能を close (2) と dup () を使って実装しようとすると、 2 つ ... ことを意味する。 */ tmpfd = dup(newfd); if (tmpfd == -1 && errno != EBADF) { /* 予期しない dup() のエラーを処理する */ } /* アトミックに 'oldfd' を 'newfd' に複製する */ if (dup2(oldfd, newfd) == -1) { /* dup2() のエラーを処理する */ } /* ここでもともと 'new ... ... ってそのファイルディスクリプターをクローズしてから再利用する。 ファイルディスクリプター newfd をクローズして再利用する処理は アトミック(不可分)に 実行される。これは重要な点である。 なぜなら、 等価な機能を close (2) と dup () を使って実装しようとすると、 2 つ ... ことを意味する。 */ tmpfd = dup(newfd); if (tmpfd == -1 && errno != EBADF) { /* 予期しない dup() のエラーを処理する */ } /* アトミックに 'oldfd' を 'newfd' に複製する */ if (dup2(oldfd, newfd) == -1) { /* dup2() のエラーを処理する */ } /* ここでもともと 'new ... ... EM_UNDO が指定された操作は、そのプロセスが終了した時に自動的に取り消される。 sops に含まれる操作の集合は、 配列の順序 で、 アトミックに 実行される。 すなわち、全ての操作が完全に実行されるか、全く実行されないかの どちらかとなる。 全ての操作が直ちに実行できな ... 例 以下の部分的なコードは、 セマフォ 0 の値が 0 になるのを待ってから、 セマフォの値を 1 加算する処理を、 semop () を使ってアトミック (atomically) に行う。 struct sembuf sops[2]; int semid; /* Code to set semid omitted */ sops[0].sem_num = 0; /* Operate on ... ... EM_UNDO が指定された操作は、そのプロセスが終了した時に自動的に取り消される。 sops に含まれる操作の集合は、 配列の順序 で、 アトミックに 実行される。 すなわち、全ての操作が完全に実行されるか、全く実行されないかの どちらかとなる。 全ての操作が直ちに実行できな ... 例 以下の部分的なコードは、 セマフォ 0 の値が 0 になるのを待ってから、 セマフォの値を 1 加算する処理を、 semop () を使ってアトミック (atomically) に行う。 struct sembuf sops[2]; int semid; /* Code to set semid omitted */ sops[0].sem_num = 0; /* Operate on ... ... ... と行番号を保持するのに使用される (ユーザーに公開されない) 内部静的変数にアクセスが行われ、同期なしで変更される。この変更は、アトミックではなく、キャンセルが無効化される前にも発生する。そのため、これら 2 つの変数のうち 1 つだけが変更された後でも割り込まれるこ ... 日本語の文書やマニュアルを配布している個人/プロジェクトへのリンクです。