int mypipe[2];
pipe(mypipe);
int dupstdout=dup2(mypipe[1],1);
cout<<"hello";//not printed on terminal
fflush(stdout);
端末で再度印刷する方法、または mypipe[0] を stdout にリダイレクトする方法は?
int mypipe[2];
pipe(mypipe);
int dupstdout=dup2(mypipe[1],1);
cout<<"hello";//not printed on terminal
fflush(stdout);
端末で再度印刷する方法、または mypipe[0] を stdout にリダイレクトする方法は?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
int mypipe[2];
pipe(mypipe);
int dupstdout=dup2(mypipe[1], 1);
printf("hello");//not printed on terminal
fflush(stdout);
close(dupstdout);
int fd = open("/dev/tty", O_WRONLY);
stdout = fdopen(fd, "w");
printf("hello again\n");
}
とにかく閉めないほうがいいstdout
。
2 番目の引数として渡された記述子dup2()
が既に開かれている場合、dup2()
すべてのエラーを無視して閉じます。明示的close()
に使用する方が安全です。dup()
標準出力のコピーを保存し、後で復元することをお勧めします。dup2
が stdout の最後のコピーを閉じると、元に戻すことができない場合があります (たとえば、制御端末がない、chroot され、/dev にも /proc にもアクセスできない、stdout が最初から匿名パイプであった、など) 。
int mypipe[2];
pipe(mypipe);
int savstdout=dup(1); // save original stdout
dup2(mypipe[1], 1);
printf("hello"); // not printed on terminal
fflush(stdout);
dup2(savstdout, 1); // restore original stdout