popen関数とpclose関数

標準I/Oライブラリのpopen関数でパイプを実現する。

#include <stdio.h>

FILE *popen(const char *command, const char *type);

戻り値: 成功ならファイルポインタ、エラーならNULL


int pclose(FILE *stream);

戻り値: シェルの終了ステータス。エラーの場合は-1

commandはシェルのコマンドライン。commandの場所はPATH環境変数を用いて検索される。

  • typeがrの場合、呼び出し側プロセスはcommandの標準出力を読み出す。

  • typeがwの場合、呼び出し側プロセスはcommandの標準入力へ書き込む

  • pclose関数はpopenによって作成された標準I/Oストリームをクローズしてコマンドの終了を待ち、シェルの終了ステータスを返す。

    //lsコマンドパイプで実現する
    #include <stdio.h>
    
    int
    main()
    {
        FILE *fp;
        char buff[1024];
    
        fp = popen("ls", "r");
    
        while (fgets(buff, sizeof(buff), fp)) {
            printf("%s", buff);    
        }   
     
        pclose(fp);
    
        return 0;
    }