当前位置:  技术问答>linux和unix

发现一个非常奇怪的问题

    来源: 互联网  发布时间:2016-09-05

    本文导语:  #include  #include  #define INPUTLEN 100 main ( int argc, char *argv[] ) { void inthandler(int); int nchars; char input[INPUTLEN]; signal(SIGINT, inthandler); do{ printf("nType some messagen"); nchars = read(0, input, (INPUTLEN - 1)); if (nchars == -1) { ...

#include 
#include 
#define INPUTLEN 100

main ( int argc, char *argv[] )
{
void inthandler(int);
int nchars;
char input[INPUTLEN];

signal(SIGINT, inthandler);

do{
printf("nType some messagen");
nchars = read(0, input, (INPUTLEN - 1));
if (nchars == -1)
{
perror("read return an error");
}
else
{
input[nchars] = '';
printf("you typed: %s", input);
}
}while (strncmp(input, "quit", 4) != 0);
return 0;
} /* ----------  end of function main  ---------- */
void inthandler(int s)
{
printf("inn");
sleep(2);
printf("outn");
} /* -----  end of function inthandler  ----- */

以上程序按下ctrl+c会有立即有in(隔两秒) out的输出,并且都是正常的,
但是把
void inthandler(int s)
{
printf("in");
sleep(2);
printf("out");
}

这个函数就是把in和out的n去掉,结果却大不一样,不立即输出in和out,非常的奇怪。
我类似的两个代码写的一摸一样,就是结果不一样,找了一下午才找到这个细小的差别,甚是不解阿

我的系统是ubuntu9.多的

|
这不奇怪, 

printf 函数是有 缓冲区的,也就是说,内容不会立即输出, 
一般遇到 n 或者你 自己调用 fflush(stdout);
就会立即刷新,或者说处处。

|
之前有人回答过类似问题,很详细,参见:
http://topic.csdn.net/u/20081216/12/117ef250-8acd-432d-a063-e862c8910102.html

|

好像c++里的cout也是这样?
我记得以前谁问过

|


是的,所以还是fprintf来的实在,有数据立即输出。。。

    
 
 

您可能感兴趣的文章:

  • 我下载了Fedora3,发现了一个奇怪的问题
  • 用source insigt 看Linux0.11内核完全注释中的内核源码时,发现了一个有关c语言语法的奇怪现象。大虾请进,帮小弟解解惑。有重谢!
  • freebsd下进行压力测试发现的问题:最大连接数只能达到500左右?
  • 重装RH9后发现的问题
  • 现在我用c语言在linux下写一个服务端程序现发现了内存泄漏问题
  • 刚刚才真正的用上了freebsd,发现了一些问题,比较疑惑。。
  • 我按书上的例子写了一个大开文件对话框,发现有一个问题
  • 今天忽然发现了这么个问题?!
  • nanman(南蛮):那日你答完问题 我忘了给分给你 今日发现 已补给你37分 不许再骂我
  • 我按了Slax Linux V5.1.8.1版,但是浏览网页时发现了一个严重的问题!!
  • 刚才发现了一个很严重的问题,java传递参数的时候不能检查正确?
  • 一个编写信号量时发现的问题
  • 发现redhat7.2的自带驱动不支持Geforce2 go,并且找到解决方法,但是还有问题!
  • 在我从TOMCAT3到TOMCAT4的升级中,发现下面的问题:
  • 偶然发现了一个以前没注意的问题,大家看看
  • Redhat 的 fedora版本是刚刚安装好的,就发现了问题:终端里执行很多命令时提示:bash: xxx 权限不够
  • 问一个简单的问题,我装了oracle 8.05,我并没有发有发现JDBC这个目录,是不是我要下载jdbc for oracle。
  • 越弄java越发现自己是菜鸟,好多方面都没有涉及到?你们大家都集中在哪方面开发?顺便帮我解决个小问题?
  • 看第二遍鸟哥的linux教程发现个小问题。
  • 请教老鸟们一个问题,同学前两天装了red hat 我用时发现竟然没有service 命令。是怎么样回事啊
  • 最后几天在搞RED LINUX HTA7。3,可是在用的过程中发现了以下问题:
  • 程序在运行一段时候(10小时)后,发现cpu占用率99%,此时可能的问题是什么?怎么能定位问题发生源?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 调查发现微信存在漏洞:冒充微信助手骗密码
  • 刚接触linux,发现安装好后通过grep memtotal查询发现比实际物理内存小。
  • 网络发现与配置工具 NeDI
  • netstat发现TIME_WAIT
  • 发现jcertify4.0答案有错误,同意者请举手
  • php iis7站长之家
  • 如何发现服务具体是哪个进程占用CPU高?
  • 网络设备自动发现工具 Observer
  • 通过JdbcOdbcDriver连接Access出现“未发现数据源名称并且未指定默认驱动程序”
  • 在非GUI程序中,我用JOptionPane.showMessageDialog后,发现程序无法结束。why?
  • 如何查看linux现在有没有发现机器的内猫?
  • 写了一个处理大量文本的程序,发现跑一段时间以后大量的吃掉内存。
  • 怎么回事,打开本页,瑞星报告发现病毒!!!
  • ipmsg采用无线点对点的模式,为什么不能发现用户!
  • 发现一个有趣的东西,继续散分。
  • 发现一个Linux牛人的博客
  • 增加 虚拟硬盘 后发现没有起作用
  • top查看CPU 发现top本身占用率奇高
  • 昨天发现fcntl设置非阻塞SOCKET会频繁的失败,不知道什么原因.
  • 发现一个 bug 赏黄金千两!
  • 高手帮帮忙!!! 在线等!!outlook的附件修改且保存后,再次打开发现是修改之前的原件


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3