int mypipe[2];
pipe(mypipe);
int dupstdout=dup2(mypipe[1],1);
cout<<"hello";//not printed on terminal
fflush(stdout);
现在如何在终端上再次打印或将 mypipe[0] 重定向到标准输出?
int mypipe[2];
pipe(mypipe);
int dupstdout=dup2(mypipe[1],1);
cout<<"hello";//not printed on terminal
fflush(stdout);
现在如何在终端上再次打印或将 mypipe[0] 重定向到标准输出?
#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
。
如果作为第二个参数传递给的描述符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