C++
 Computer >> コンピューター >  >> プログラミング >> C++

Linuxでパイプを使うCプログラムの作成方法を解説

この記事では、Linuxでパイプ(pipe)を使用するCプログラムの作成方法を解説します。作成するプログラムでは、入力ストリームからテキストを読み込み、それを出力画面に表示します。

まずは、Linuxにおけるパイプの基礎知識から確認していきましょう。

Linuxにおけるパイプとは

パイプ(pipe)はデータを転送するための仕組みで、LinuxやUnixベースのシステムにおいて、プロセス間・コマンド間・プログラム間で標準出力を受け渡すためのプロセス間通信(IPC)として利用されます。

パイプについて注意すべき重要な点として、パイプは単方向であるということが挙げられます。つまり、データはプログラム内で左から右、または右から左のいずれか一方向にのみ流れます。

プログラムの仕組み

ここでは、ユーザーからの入力を読み込み、それを出力画面に表示するパイプを作成します。実装では、サイズ2の配列を使用し、arr[0]が入力(読み込み)用、arr[1]が出力(書き込み)用として機能します。

パイプの動作の流れは以下のとおりです。

  • pipe()関数を呼び出してパイプを作成する
  • write()関数でパイプの書き込み端にデータを書き込む
  • read()関数でパイプの読み込み端からデータを読み取る

Linuxでパイプを使うCプログラムのサンプルコード

#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
int main(){
    int Pipe[2];
    char string[100];
    if (pipe(Pipe) == -1){
        perror("Filed to create pipe");
        exit(1);
    }
    scanf("%s", string);
    write(Pipe[1], string, strlen(string)+1);
    printf("\n");
    read(Pipe[0], string, 5);
    printf("%s", string);
}

実行結果

input: TutorialsPoint
TutorialsPoint

コードの解説

  • pipe(Pipe):サイズ2の整数配列を渡してパイプを生成します。失敗した場合は-1を返すため、エラーハンドリングを行っています。
  • write(Pipe[1], string, strlen(string)+1):標準入力から読み込んだ文字列を、パイプの書き込み端(Pipe[1])に書き込みます。
  • read(Pipe[0], string, 5):パイプの読み込み端(Pipe[0])から最大5バイトのデータを読み取り、文字列バッファに格納します。

このように、パイプを使うことで同一プロセス内はもちろん、親子プロセス間でもデータのやり取りを簡単に実装できます。実際の開発では、fork()と組み合わせてプロセス間通信を行うケースが多くあります。

  1. C++で学ぶクイックソート(QuickSort)の仕組みと実装方法

    クイックソートとはクイックソート(Quicksort)は、比較に基づいて未ソートのリスト(配列)を並べ替えるソートアルゴリズムの一つです。「パーティション交換ソート(partition exchange sort)」とも呼ばれます。クイックソートは安定ソートではありません。これは、等しい値を持つ要素同士の相対的な順序が保持されないためです。ただし、配列に対してごくわずかな追加メモリだけで動作するため、メモリ効率に優れています。選択ソートと非常に似ていますが、常に最悪のパーティションを選んでしまうわけではない点が異なり、より洗練された形の選択ソートと捉えることもできます。クイックソートは最も効率

  2. Pythonでクイックソートを実装する方法|初心者向けにサンプルコードを徹底解説

    この記事では、クイックソート(QuickSort)のアルゴリズムを使って配列を並べ替えるPythonプログラムの実装方法を、初心者にもわかりやすく解説します。 問題の定義 問題: 与えられた配列を、クイックソートの考え方を利用して昇順にソートすることです。 クイックソートは「分割統治法」と呼ばれる手法に基づく高速なソートアルゴリズムです。まず配列を基準値(ピボット)を境目に2つの部分に分割し、それぞれの部分配列を再帰的にソートしていくことで、最終的に全体が整列された配列を得られます。 クイックソートの仕組み 処理の流れは以下のとおりです。 配列からピボット(基準となる要素)を選びます。こ