読者です 読者をやめる 読者になる 読者になる

標準入力(stdin)を文字列(string)にすり替える方法

こういうのがよかったです.

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]);
}