FromNandの日記

自分的備忘録

【Linux】パイプ機能とリダイレクトの優先順位について

linuxにはパイプというものがあり、例えば

// prog1.c

#include<stdio.h>

int main(void){
        printf("hello world!\n");
        return 0;
}

// prog2.c

#include<stdio.h>

int main(void){
        char c;
        while( (c = getchar() ) != EOF){
                printf("%c", c);
        }
        return 0;
}


これをそれぞれコンパイルして次のようにコマンドを打つ。

> ./pro1 | ./pro2


すると出力は次のようになる。

hello world!


つまりパイプ機能とは  |  の前のプログラムの標準出力を  |  の後の標準入力につなぐ機能らしい。
ここでtxtというファイルに「HELLO WORLD!」という内容を書き込んでおく。
そして次のコマンドを実行する。

> ./pro1 | ./pro2 <txt


これは下のように出力される

HELLO WORLD!

つまり、パイプよりファイル入力の方が優先されるらしい。
ファイル入出力はリダイレクトと呼ばれるので、パイプ < リダイレクトが成り立つのだろう。