手軽にパイプを使えるライブラリ。
普通にファイルをオープンして読み書きするような感覚で、子プロセスの標準入出力を扱える。
cmdで実行する子プロセスを指定する。これは、具体的には以下のように実行される。#include <stdio.h> FILE *popen(const char *cmd, onst char *type); int pclose(FILE *fp);
typeは、fopenと同様に"r"または"w"を指定する。"r"としたときは子プロセスの標準出力を読むことができ、"w"としたときは子プロセスの標準入力に書き込むことになる。sh -c cmd
lsが出力したものをsortに渡している。sortは-rオプションを付けているので、結果としてlsの出力結果を降順に並べ替えて出力している。つまり、#include <stdio.h> #define MAXLINE 1024 int main() { char s[MAXLINE]; FILE *fpin, *fpout; fpin = popen("ls", "r"); fpout = popen("sort -r", "w"); while(fgets(s, MAXLINE, fpin) != NULL){ fputs(s, fpout); } pclose(fpin); pclose(fpout); return 0; }
と同様の結果となる。ls | sort -r