发新话题
打印

freopen()

freopen()

请教:
& e( F* K3 f% efreopen( "input.txt" , "r" , stdin );2 \" f! D7 k9 {
scanf( "%d" , &tt );
" l+ g  I* b; e4 y% I& m6 J printf( "tt=%d\n" , tt );$ V/ [+ ^8 [3 I# M
freopen("/dev/console","r",stdin);
. g3 U* v1 |4 s4 u- x# @4 h scanf("%d",&tt);, I/ L5 q5 A6 ?' t
printf("%d\n",tt);6 b+ X6 y" U5 R0 M9 f! L3 }9 A) q

' Z; j/ x  i8 G9 m1 R/ P原本想从 input.txt 内读出一个数据,然后就转回来,换成标准输入。. [4 a) ]# B- r2 A8 ^3 o
5 x8 ]! k; a' ~4 ?5 M6 B+ K& e$ @- ~
网上也是这样子介绍的。。。。- k5 z* N9 v" H1 H5 e  p
8 s: x( `' O/ e# \  N8 @
可是,在实际运行的时候,从 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 !+ g" w7 F* b5 K( ?, P* ~' e4 l9 R5 Z
% `& s* i- V8 c4 z
只要把"/dev/console"改成"/dev/tty"就可以了
4 N% J  r& N$ t4 J$ S+ J7 ]
5 k5 f; H4 r! D3 r! g8 r查到的一点东东 对于理解这个还是有点用的。 呵呵+ {/ o' u( D) \

  X7 s* F1 F' K5 o& l/dev/console  代表的是系统控制台,每个LINUX系统都会有一个专门的终端或显示屏用来接收控制台消息。通常就是“活跃”的虚拟控制台,而在X Windows系统下,它会是屏幕上一个特殊的控制台窗口。
* b& G: }9 k! M2 `; w9 u( A& K% `! f9 X6 |4 o: {& X
特殊文件 /dev/tty  是进程控制终端(键盘和显示屏,或者键盘和窗口)的一个别名(逻辑设备)--如果这个程序有控制终端的话。 /dev/tty 允许程序直接向用户输出信息,不管用户具体使用的是哪种类型的伪终端。在标准输出被重定向的情况下,这一功能非常有用。  f% i; }2 V% C1 i0 I  H! {0 I5 p: J
- p9 T. R! t- H# x& y9 l& x
/dev/console 设备只有一个,但通过 /dev/tty 能够的物理设备却可以说是数不胜数。      

TOP

小弟新手   还不是很明白
4 w1 x, F8 l- m6 F" z% d
# P/ @6 b  G" [0 i9 m! [( l7 _freopen 中为什么是stdin啊,我感觉应该是stdout
$ G, Y' _8 g9 a) ^, W4 a  b2 [' M( s3 H( i8 T
大虾解释啊      
forever love forever linux

TOP

发新话题