发新话题
打印

freopen()

freopen()

请教:, C& e; O* @3 v) h$ R5 v
freopen( "input.txt" , "r" , stdin );+ v7 l6 O5 U6 U
scanf( "%d" , &tt );4 C' I3 h$ M6 k, s
printf( "tt=%d\n" , tt );: _0 x, A) X4 O. J0 z7 \* `
freopen("/dev/console","r",stdin);
% j7 X1 y' F3 f0 F% I scanf("%d",&tt);
1 N. U6 d, S. f" b printf("%d\n",tt);9 L' Q  o7 H- q/ k. P
$ j) X) W1 i, g5 R3 n. N: L8 p
原本想从 input.txt 内读出一个数据,然后就转回来,换成标准输入。# @. ^! T- }$ q3 W% A. C0 J

+ ^# P) f, V& i网上也是这样子介绍的。。。。9 x3 r8 V9 l: ?) O* J6 V* B
' O6 V: a" T3 N+ }5 B& [
可是,在实际运行的时候,从 input.txt 内读入一个数据后,就一直输入空行,没办法再输入其他数据,这是为啥????      

TOP

复制内容到剪贴板
代码:
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[26047 0] #[/color] cat freopen.c
#include <stdio.h>
#include <unistd.h>

int
main()
{
    FILE *fp;
    char buf[1024];
    char tty[32];

    ttyname_r(fileno(stdin), tty, sizeof(tty));

    fp = freopen("./freopen.c", "r", stdin);
    fgets(buf, sizeof(buf), stdin);
    printf("%s", buf);

    fp = freopen(tty, "r", stdin);
    fgets(buf, sizeof(buf), stdin);
    printf("%s", buf);

    return 0;
}
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[26047 0] #[/color] gcc freopen.c
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[26047 0] #[/color] ./a.out
#include <stdio.h>
This line is inputed by me.
This line is inputed by me.
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[26047 0] #[/color] o
      
'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间

TOP

谢谢 dearvoid !3 C3 {) e( y. g0 M; ~6 Y
* g' O% w5 I/ V( {7 C9 J' }4 g
只要把"/dev/console"改成"/dev/tty"就可以了
% R) x4 [2 p; ~/ H) U- E) v# _3 n* L- [6 o3 t
查到的一点东东 对于理解这个还是有点用的。 呵呵. I6 L3 o) J6 c

' G# T* h2 o$ A/dev/console  代表的是系统控制台,每个LINUX系统都会有一个专门的终端或显示屏用来接收控制台消息。通常就是“活跃”的虚拟控制台,而在X Windows系统下,它会是屏幕上一个特殊的控制台窗口。3 B7 {* O2 H& c9 G8 j/ @# W

; A; k+ |( T7 n% S) F5 o/ a0 V特殊文件 /dev/tty  是进程控制终端(键盘和显示屏,或者键盘和窗口)的一个别名(逻辑设备)--如果这个程序有控制终端的话。 /dev/tty 允许程序直接向用户输出信息,不管用户具体使用的是哪种类型的伪终端。在标准输出被重定向的情况下,这一功能非常有用。
: x6 T* }) T8 B$ v3 x1 Z6 r
5 }/ E( V- h6 p9 Y/dev/console 设备只有一个,但通过 /dev/tty 能够的物理设备却可以说是数不胜数。      

TOP

小弟新手   还不是很明白
: M: P0 u" S/ g" l$ d8 `+ \8 h( \0 S8 e
freopen 中为什么是stdin啊,我感觉应该是stdout
6 S) i& m' J5 C2 M0 L0 W7 N3 M, w  R, F2 j
大虾解释啊      
forever love forever linux

TOP

发新话题