我想重开stdin和stdout(也许stderr当我在它)的文件句柄,从而使未来的呼叫printf()或putchar()还是puts()会去到一个文件,以及未来的呼叫getc()和这种将来自一个文件.
1)我不想永久丢失标准输入/输出/错误.我可能希望稍后在程序中重用它们.
2)我不想打开新的文件句柄,因为这些文件句柄必须要么传递很多,要么全局传递(不寒而栗).
3)如果我无法帮助,我不想使用任何open()或fork()其他系统相关的功能.
所以基本上,这样做是否有效:
stdin = fopen("newin", "r");
Run Code Online (Sandbox Code Playgroud)
而且,如果确实如此,我怎样才能得到原来的价值stdin?我是否必须将其存放在一个FILE *以后才能将其取回?
我想知道的区别stdout,并STDOUT_FILENO在Linux中C.
经过一番搜索工作,我得出以下结论.你能帮我复习并纠正错误吗?谢谢
stdout属于C语言的标准I/O流; 其类型为FILE*并在stdio.h中定义
STDOUT_FILENO拥有int类型,定义于unistd.h.它是LINUX系统的文件描述符.在unistd.h,它的解释如下:
Run Code Online (Sandbox Code Playgroud)The following symbolic constants shall be defined for file streams: STDERR_FILENO File number of stderr; 2. STDIN_FILENO File number of stdin; 0. STDOUT_FILENO File number of stdout; 1.
因此,在我看来,STDOUT_FILENO属于系统级调用,并且在某种程度上,就像系统API一样.STDOUT_FILENO可用于描述系统中的任何设备.
在stdout较高的水平(用户级?)定位和实际封装的细节STDOUT_FILENO.stdout有I/O缓冲区.
这是我对他们差异的理解.任何评论或更正都表示赞赏,谢谢.
我正在为Linux编写命令行实用程序.如果输出(stdout)转到shell,那么打印一些转义来着色输出会很不错.但是如果输出被重定向,则不应该打印那些bash转义,或者内容可能会破坏依赖于该输出的解析器.
有几个程序执行此操作(吮吸ack),但我发现的是用Perl编写的,我无法找到他们是如何做到的.
我想用C/C++来编写我的实用程序.