手軽にパイプを使えるライブラリ。
普通にファイルをオープンして読み書きするような感覚で、子プロセスの標準入出力を扱える。
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
#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に渡している。sortは-rオプションを付けているので、結果としてlsの出力結果を降順に並べ替えて出力している。つまり、
と同様の結果となる。ls | sort -r