こういうのがよかったです.
rewindはプログラム内で複数回こんなかんじのパイプ処理をするときにしないといけないと思います.
stdinが使えなくなっちゃうんでその対策は考えといてください.
#include <bits/stdc++.h> #include <unistd.h> #include "testlib.h" int main(){ //パイプ生成 int pipefd[2]; if (pipe(pipefd) < 0) { perror("pipe"); exit(-1); } // パイプへの書き込み const char *content = "1 2 3 4\n"; write(pipefd[1], content, strlen(content)); close(pipefd[1]); // これでEOFをきちんと示す // パイプをSTDINのディスクリプタ番号に結びつけ dup2(pipefd[0],STDIN_FILENO); //stdinのファイル指示子とかいろいろ初期化 rewind(stdin); // 実際の処理 EOFまで読み込む int tmp; while( std::cin >> tmp ) std::cout << tmp << std::endl; close(pipefd[0]); }