LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1289|回复: 11

这个是终端属性还是glibc的bug?

[复制链接]
发表于 2006-1-24 10:09:52 | 显示全部楼层 |阅读模式
下面的程序

  1. //io.c
  2. #include <stdio.h>

  3. main()
  4. {
  5.     int c;

  6.     c = getchar();
  7.     putchar(c);
  8. }
复制代码

在linux下编译执行
gcc io.c
./a.out

没有输出字符,在tc2.0和vc6下有输出。若在putchar(c)后面再加一条语句putchar('\n')或者改成printf('%d\n", c)则有字符输出,若把printf语句的\n去掉,也没有输出。请问这是什么原因?

环境
uname -a
Linux debian 2.6.15-1-686 #1 Wed Jan 18 15:04:35 UTC 2006 i686 GNU/Linux

gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --with-tune=i686 --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.0.3 20060115 (prerelease) (Debian 4.0.2-7)

ldd a.out
        linux-gate.so.1 =>  (0xffffe000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e4b000)
        /lib/ld-linux.so.2 (0xb7f9a000)

libc版本
glibc-2.3.5
发表于 2006-1-24 11:32:57 | 显示全部楼层
输出缓冲的问题!非bug
回复 支持 反对

使用道具 举报

发表于 2006-1-24 11:37:11 | 显示全部楼层
我运行了你的测试,正常。
本机系统如下:

[matt@localhost tmp]$ ./a.out
d
d[matt@localhost tmp]$ uname -a
Linux localhost.localdomain 2.6.14-1.1644_FC4smp #1 SMP Sun Nov 27 03:39:31 EST 2005 i686 i686 i386 GNU/Linux
[matt@localhost tmp]$ gcc -v
使用内建 specs。
目标:i386-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,java,f95,ada --enable-java-awt=gtk --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --host=i386-redhat-linux
线程模型:posix
gcc 版本 4.0.2 20051125 (Red Hat 4.0.2-8)
[matt@localhost tmp]$ ldd a.out
        linux-gate.so.1 =>  (0x003c0000)
        libc.so.6 => /lib/libc.so.6 (0x00b1b000)
        /lib/ld-linux.so.2 (0x00afd000)
[matt@localhost tmp]$ rpm -q glibc
glibc-2.3.5-10.3

觉得你这条连接有点怪:
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e4b000)
回复 支持 反对

使用道具 举报

发表于 2006-1-24 14:23:53 | 显示全部楼层
输出在新一行SHELL提示符最前面,是不是你没注意到?
回复 支持 反对

使用道具 举报

发表于 2006-1-24 14:48:32 | 显示全部楼层
程序退出时会刷新所有的缓冲流,这个不是缓冲的问题。
不过我觉得不可能会出不来字符的啊。
你的终端是怎么设置的?
回复 支持 反对

使用道具 举报

发表于 2006-1-24 15:20:22 | 显示全部楼层
我和楼主的环境一样,没有问题。估计是像“弥敦路九号”说的,在shell提示符前面楼主没注意到。

somebody@somewhere:~/Projects/test$ ./a.out
s
ssomebody@somewhere:~/Projects/test$ ldd a.out
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-24 18:06:59 | 显示全部楼层
估计是 bash 的问题,在tcsh下执行不会有这问题,bash还有个奇怪的问题,一直按着回车会有断行现象

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-1-24 18:13:38 | 显示全部楼层
这有什么奇怪的,在没执行完上一条命令(即使是空行,也会引起shell的处理)前,你按回车也会打印回车符啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-24 21:08:39 | 显示全部楼层
Post by kiron
这有什么奇怪的,在没执行完上一条命令(即使是空行,也会引起shell的处理)前,你按回车也会打印回车符啊。


我并没有执行什么命令,只是一直按回车,如果一下一下慢慢按就没有这种现象,tcsh不管怎样按都不会有空行现象
回复 支持 反对

使用道具 举报

发表于 2006-1-25 18:24:47 | 显示全部楼层
[gnap@osiris src]$ bash --version
GNU bash, version 3.00.16(1)-release (i386-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
[gnap@osiris src]$

我的FC4按了很久也没有出现过这种情况!我用的是aterm。mlterm,gnome-terminal我试过了也没有这中情况!~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表