重定向标准I/O: freopen + stdin/stdout vs open + dup2
Redirecting standard I/O: freopen + stdin/stdout vs open + dup2
我想将stdin/stdout重定向到某个文件。该程序是为Unix操作系统编写的,但我认为使用标准的C/c++库而不是操作系统函数是好的。我知道如何使用操作系统函数dup2()
和open()
来做到这一点,但我读了一些方法,可以在stdin
或stdout
上使用reopen()
。重新打开标准变量会做我想要的吗?它会替换以0和1文件描述符打开的文件吗?哪一种方式更好?
由于您正在编写自己的shell,因此我将使用较低级别的dup2()和open()函数。
stdin上的freopen()将关闭原始stdin,并在stdin位置打开您所要求的文件-因此您现在丢失了stdin。当然,如果您使用open()和dup2()来替换文件句柄0或1,这并没有太大的区别—您仍然会丢失原始的stdin,因此只有在分叉之后才这样做。
相关文章:
- 当使用带有stdin和stdout重定向的双进程管道时,如何避免stdin上的重复输入
- stdin,stdout,stderr是如何关闭的
- 通过stdin/stdout和qdatastream与Qprocess进行通信
- QT控制台:记录所有stdin和stdout要文件
- 将Stdout重定向到另一个程序的Stdin
- 为什么 read() 在管道连接到使用 boost::asio for STDIN/STDOUT 的程序时,使用 EAG
- 从C/C++调用Objective C stdin/stdout管道时,它是如何工作的
- stdout and stdin relationships
- 在c++中重定向bash stdin和stdout
- C++Eclipse:stdin位于与stdout不同的控制台中
- C++启动一个脚本(bash,python..)并使用stdin/stdout进行datatransfare [linu
- 测试使用 tty stdin 和 stdout 的程序
- C/C++服务器,通过stdin/stdout与客户端通信(阻塞stdin,直到读取了大量字节)
- 如何正确启动进程并转发 stdin/stdout/stderr
- 如何在c++中运行应用程序,并在windows中向其stdin写入和从其stdout读取
- 仅重定向子进程stdin,并从stdout和stderr中删除数据
- 如何用Qt 5.7初始化stdout stdin
- StdIn / StdOut / StdErr重定向到WinSock连接
- NodeJS-C/C++插件通信(stdin-stdout)
- 重定向标准I/O: freopen + stdin/stdout vs open + dup2