Linuxプロセス通信におけるFIFOの実装

Linuxプロセス通信におけるFIFOの実装

FIFO通信(先入れ先出し)

関連のないプロセス間の通信を可能にする FIFO 名前付きパイプ。

  • パイプの疑似ファイルを作成する
    • a. mkfifoを使用してtestfifoコマンドを作成する
    • b. 関数 int mkfifo(const char *pathname, mode_t mode); を使用することもできます。
  • カーネルは fifo ファイル用のバッファを開き、fifo ファイルを操作します。バッファを操作してプロセス間通信を実現できます。実際には、ファイルの読み書きです。

男3 mkfifo

#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *パス名、mode_t モード);

注記:

FIFO
FIFOの読み取り側または書き込み側を開くと、もう一方の側も(別のプロセスまたはスレッドによって)開かれるまでブロックされます。
詳細についてはfifo(7)を参照してください。

fifo ファイルを開くと、読み取り側は書き込み側が開くのを待ってブロックされ、書き込み側も別の側が開くのを待ってブロックされます。

コード例:
file_w.c 書き込み終了

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <文字列.h>

int main(int argc, char *argv[]) {
  引数が2の場合
    printf("./a.out ファイル名1\n");
    -1 を返します。
  }
  printf("w\n を開いて開始");
  int o_ret = open(argv[1], O_WRONLY);
  printf("w\n のオープン終了");
  char buf[256];
  整数 = 0;
  一方(1){
    memset(buf, '\0', sizeof(buf));
    sprintf(buf, "xiaoming--%d", num++);
    printf("strlen(buf) = %d\n", strlen(buf));
    書き込み(o_ret、buf、strlen(buf));
    睡眠(1);
  }
  閉じる(o_ret);
  0を返します。
}
 

file_r.c 読み取り側

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <文字列.h>

int main(int argc, char *argv[]) {
  引数が2の場合
    printf("./a.out ファイル名1\n");
    -1 を返します。
  }
  printf("r をオープンし始める\n");
  int o_ret = open(argv[1], O_RDONLY);
  printf("open r の終了\n");
  char buf[256];
  整数 = 0;
  一方(1){
    memset(buf, '\0', sizeof(buf));
    読み取り(o_ret、buf、sizeof(buf));
    printf("strlen(buf) = %d\n", strlen(buf));
    printf("読み取りは%s\n", buf);
  }
  閉じる(o_ret);
  0を返します。
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 匿名パイプ経由の Linux プロセス間通信
  • Linux プロセス間通信方式ソケットの使用例
  • Linux のプロセス間通信方式とその長所と短所についての簡単な説明
  • Linuxのプロセス間通信のメッセージキュー実装の詳細な説明
  • Linux プロセス間通信 - シグナルの使用
  • Linux プロセス間通信 - ストリーム ソケットの使用
  • Linux のプロセス間通信の詳細説明 - セマフォの使用
  • Linux のプロセス間通信の詳細説明 - 共有メモリの使用
  • プロセス間通信に関する Linux アプレット

<<:  MySQL ルートパスワードを変更する 4 つの方法 (要約)

>>:  jQueryはショッピングカート機能を実装します

推薦する

MySQLでバッチを更新するいくつかの方法

通常、フィールド値を更新するには次の SQL ステートメントを使用します。 mytable を更新し...

Linux マルチスレッドにおけるフォークとミューテックス ロック プロセスの例

目次質問: 1. 最初の試み2. 合理的な分析3. 問題解決(1) pthread_join()の使...

vue3 タイムスタンプ変換 (フィルターを使用せずに)

vue2 では、タイムスタンプを変換するときに、通常はフィルターを使用します。vue3 以降では、...

Navicat を仮想マシン MySQL に接続する際によくあるエラーと解決策

質問1 解決するサービスを開始します: service mysqld start; /sbin/ip...

Centos7.X Linux システムに tomcat8 をインストールするためのグラフィック チュートリアル

1. Tomcatのインストールパスを作成する mkdir /usr/local/tomcat 2....

MySQL操作テーブルでよく使われるSQLのまとめ

1. テーブル内のフィールドの種類を表示する テーブル名を記述する desc テーブル名 2. テー...

MySQL データベースに基づくデータ制約の例と 5 つの整合性制約の紹介

非準拠データがデータベースに入るのを防ぐために、ユーザーがデータを挿入、変更、削除、その他の操作を行...

IdeaはリモートDockerをデプロイし、ファイルを構成する

1. LinuxサーバーのDocker構成ファイルを変更する vim /usr/lib/system...

MySQL 挿入時間の 8 時間の違いの問題の解決方法

MySQL挿入時の8時間の時差の問題を解決する通常、jdbc の URL にはいくつかのパラメータを...

React Hooksの詳細な説明

目次フックとは何ですか?クラスコンポーネント機能コンポーネントフックが作られた理由要約するフックとは...

HTMLとCSSを使用して、自分だけの暖かい男「Dabai」を作成します

最終結果はこんな感じです、かわいいでしょう… PS: HTML と CSS の知識があればベストです...

tinyMCEの使い方と体験の詳細な説明

tinyMCE の使用方法の詳細な説明初期化TinyMCE を初期化するときは、ページの HEAD ...

Dockerイメージ内のファイルを表示する方法

Dockerイメージ内のファイルを表示する方法1. すでに実行中の場合すでに実行中のイメージについて...

Linux ユーザー スクリプトの作成/推測ゲーム/ネットワーク カード トラフィック監視の紹介

目次1. ユーザーが作成したスクリプト2. 単語当てゲーム3. ネットワークカードのトラフィック監視...

Linux コマンドラインでメールを送信する 5 つの方法 (推奨)

シェル スクリプトで電子メールを作成する必要がある場合は、コマンド ラインから電子メールを送信する知...