実験的な内容
パイプライン通信を実装するプログラムを書いてください。パイプを作成するには、システムコールpipe()を使用します2つの子プロセスP1とP2がそれぞれのパイプに文を書きます:
子1がメッセージを送信中!
子2がメッセージを送信中!
親プロセスは子プロセスからパイプラインから2つの情報を読み出して表示します(最初にP1、次にP2を受け取る必要があります)。
実験的ガイダンス
1.パイプラインとは
OS開発におけるUNIXシステムの最も重要な貢献の1つは、システムの最初の取り組みです。パイプこれもUNIXシステムの大きな特徴です。
いわゆるパイプラインは、書き込みプロセスと読み取りプロセスに接続できる共有ファイルで、プロデューサコンシューマ方式で通信することを可能にします。これはパイプファイルとも呼ばれます。書き込みプロセスは、パイプラインの書き込み側(ハンドル1)からパイプラインにデータを書き込み、読み取りプロセスは、パイプラインの読み取り側(ハンドル0)からデータを読み取ります。
handle fd [0]
ハンドルfd [1]
リーダー
書き込み
2番目に、パイプラインのタイプ:
1、pipelineと名前が付けられます。システムコールmknod()で作成されました。匿名パイプの使用の制限を克服し、より多くのプロセスがパイプを使用して通信できるようにします。したがって、他のプロセスはその存在を知ることができ、ファイルにアクセスするためにパス名を使用できます。名前付きパイプへのアクセスは他のファイルへのアクセスと同じで、最初にopen()でオープンします。
2、匿名パイプ
一時ファイル。 pipe()で作成された名前のないファイル(パス名なし)。システムコールによって返されたファイルディスクリプタだけがファイルの識別に使用されるので、pipe()およびその子孫を呼び出すプロセスだけがファイル(pipe)と通信するためにファイルディスクリプタを認識できます。これらのプロセスがこのパイプラインを使用しなくなると、コアはそのインデックスノードを再利用します。
2つのパイプの読み方と書き方は同じですが、この記事では無名パイプについてのみ説明します。
3、パイプファイルの確立
ディスクとメモリのインデックスノードの割り当て、読み込みプロセスのファイルエントリの割り当て、書き込みプロセスのファイルエントリの割り当て、ユーザーファイル記述子の割り当て
4、読み取り/書き込み処理の相互排除
カーネルはアドレスに読み取りポインタと書き込みポインタを設定し、先入れ先出し順に読み書きを行います。
読み書きプロセスが相互に排他的な方法でパイプファイルにアクセスするには、各プロセスがパイプファイルのインデックスノード内の直接アドレスエントリに相互排他的にアクセスする必要があります。したがって、プロセスがパイプファイルにアクセスするたびに、インデックスファイルがロックされているかどうかを確認する必要があります。そうであれば、プロセスはスリープし、そうでなければそれはロックされ、読み書きされる。操作が終了したらロックを解除し、インデックスノードがロックされているためスリープしているプロセスを起動します。
3、関係するシステムコール
1、pipe()
無名パイプを作成します。
システムコールフォーマット
pipe(filedes)
パラメータの定義
int pipe(filedes);
int filedes [2];
ここで、filedes [1]は書き込み終了、filedes [0]は読み込み終了です。
この関数は次のようにヘッダーファイルを使用します。
#include< unistd.h>
#inlcude< signal.h>
#include<; stdio.h>
2、read()
システムコールフォーマット
read(fd、buf、nbyte)
機能:fdより指定されたファイルからnバイトのデータが読み取られ、ポインターbufによって示されるバッファーに送信されます。ファイルがロックされている場合は、ロックが開くまで待ちます。
パラメータの定義
int read(fd、buf、nbyte);
int fd;
char * buf;
unsigned Nbyte;
3、write()
システムコールフォーマット
read(fd、buf、nbyte)
function:nbyteバイトを置くデータは、bufが指すバッファからfdが指すファイルに書き込まれます。ファイルがロックされている場合は、ロックが解除されるまで書き込みは中断されます。
パラメータの定義はread()と同じです。
プロセスのパイプライン通信を実装するプログラムをコンパイルします。システムコールpipe()を使用してパイプラインを作成します。 2つの子プロセスp1とp2が文章をチャネルに書き込みます。 child1プロセスがメッセージを送信しています! child2プロセスがメッセージを送信しています! 親プロセスはパイプラインからのものです。 2つのプロセスからの情報が読み出され、画面に表示されます。 プログラム1:
#include< unistd.h>#include< sys /types.h>#include< errno.h>#include< stdio.h>#include<; stdlib.h>#include< string.h> int main(){int pipe_fd [2]; pid_t pid; char buf_r [100]; char * p_wbuf; int r_num; memset(buf_r、0、sizeof(buf_r)); if(pipe(pipe_fd)< 0){printf(" pipe create error \\ n"); return -1;} if((pid = fork())== 0){printf(" \\ n"; )(close(pipe_fd [1]); sleep(2); if((r_num = read(pipe_fd [0]、buf_r、100))> 0){printf("%d個のパイプから読み取られた数は%) s \\ n"、r_num、buf_r);} close(pipe_fd [0]); exit(0);} else if(pid> 0){close(pipe_fd [0]); if(write(pipe_fd [1]、) “ Hello”、5)!= - 1)printf(“親ライター成功!\\ n”); if(write(pipe_fd [1]、“ pipe”、5)!= - 1)printf("親write2成功!\\ n"); close(pipe_fd [1]); sleep(3); waitpid(pid、NULL、0); exit(0);}}
Linuxでlive55を実行すると、次のように表示されます。no ip:ip is 0.0.0.0 live555は、ローカルIPアドレスとネットワークインターフェースを知らないローカルポートはU
要件のシナリオ
プロキシサーバーのHAProxyを使用したMysqlのロードバランシングサーバーの障害やデータの複製など、Mysqlに問題がある場合のユーザビリティを向上させるための一般的な方法です。中断した場合は、HAProxyにすぐに通知してからリクエストの転送を停止することをお勧めします。
HAProxy Mysqlに問題があるかどうかを確認するにはどうすればよいですか。
アイデア
Egrep -o up([0-9] +)日
Linux環境でUSBインタフェースストレージデバイスを使用する方法?これは、主要なコンピュータフォーラムで発生している問題であり、これも多くのコンピュータプレイヤーが直面している問題であることがわか
データはUnix /Linuxシステムの最も重要な部分ですが、データのバックアップと同期は最も見過ごされがちな作業です。定期的なデータのバックアップと同期により、ディスクに障害が発生した場合のデータ損失を最小限に抑えることができます。ユーザーが誤ってデータの破損や損失を引き起こした場合は、すぐに回復できます。
データのバックアップはシステム全体のバックアップとは異な
Cpio -ov&gt; backup.cpio このディレクトリを復元するには、次のコマンドを使用します。 #cpio -ivdum cpioアーカイブファイルが含まれています。ファイル