免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2521 | 回复: 12
打印 上一主题 下一主题

这个问题向不明白,求教。。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-10 14:42 |只看该作者 |倒序浏览
比如有这么个shell脚本---test.sh:



  1.   echo " Wellcom "

复制代码


又编了一个c:

  1. #include <stdio.h>;
  2. main()
  3. {
  4.   printf("This is a c program.\n");
  5. system("sh ./test.sh");
  6. }
复制代码

编译后执行结果如下:

Wellcom
This is a c program.

请问为什么结果不是:

This is a c program.
Wellcom

为什么?请各位大侠赐教

论坛徽章:
0
2 [报告]
发表于 2003-02-10 14:47 |只看该作者

这个问题向不明白,求教。。。。

对不起修正一下
上面的
printf("This is a c program.\n";

改为
printf("This is a c program.";//少了一个\n

执行结果是:

Wellcom
This is a c program.

而带了 \n则执行的结果是:

This is a c program.
Wellcom

请问为什么会这样?

论坛徽章:
0
3 [报告]
发表于 2003-02-10 15:00 |只看该作者

这个问题向不明白,求教。。。。

显示的原因

论坛徽章:
0
4 [报告]
发表于 2003-02-10 15:05 |只看该作者

这个问题向不明白,求教。。。。

嗯,能说得明白一点吗?

既然是显示的原因,那为什么前后不一样呢?别说是因为多了一个“\n”.我是想知道为什么多了一个"\n"就会造成前后结果的差距。

谢谢。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2003-02-10 15:20 |只看该作者

这个问题向不明白,求教。。。。

printf 函数的输出方向是 stdout, 而 stdout 是行缓冲的,所以如果输出信息不满一行的话,就不会在屏幕上及时的看到结果。
改成
  1. #include <stdio.h>;
  2. main()
  3. {
  4.     printf("This is a c program.");
  5.     fflush(stdout);
  6.     system("sh ./test.sh");
  7. }
复制代码

就可以了。
或者
  1. #include <stdio.h>;
  2. main()
  3. {
  4.     fprintf( stderr, "This is a c program.");
  5.     system("sh ./test.sh");
  6. }
复制代码

也行.

论坛徽章:
0
6 [报告]
发表于 2003-02-10 15:23 |只看该作者

这个问题向不明白,求教。。。。

原帖由 "flw" 发表:
printf 函数的输出方向是 stdout, 而 stdout 是行缓冲的,所以如果输出信息不满一行的话,就不会在屏幕上及时的看到结果。
改成
  1. #include <stdio.h>;
  2. main()
  3. {
  4.     printf("This is a c program.");
  5.     fflush(stdout);
  6.     system("sh ./test.sh");
  7. }
复制代码

就可以了。
或者
  1. #include <stdio.h>;
  2. main()
  3. {
  4.     fprintf( stderr, "This is a c program.");
  5.     system("sh ./test.sh");
  6. }
复制代码

也行.
呵呵,挺快的嘛!
支持你当斑竹!

论坛徽章:
0
7 [报告]
发表于 2003-02-10 15:25 |只看该作者

这个问题向不明白,求教。。。。

谢谢,谢谢,您老先生的回答很到位。

谢谢,谢谢。

论坛徽章:
0
8 [报告]
发表于 2003-02-10 17:10 |只看该作者

这个问题向不明白,求教。。。。

再请教一下:  printf将str1写往stdout, 没有flush, 然后echo将str2写往stdout,  所有stdout buffer的内容全部输出, 为什么输出不是str1+str2, 而是str2+str1? 难道stdout buffer不止一个?

论坛徽章:
0
9 [报告]
发表于 2003-02-10 17:28 |只看该作者

这个问题向不明白,求教。。。。

[quote]原帖由 "tulobear"]再请教一下:  printf将str1写往stdout, 没有flush, 然后echo将str2写往stdout,  所有stdout buffer的内容全部输出, 为什么输出不是str1+str2, 而是str2+str1? 难道stdout buffer不止一个?[/quote 发表:


嗯?可能是echo不是用缓存的缘故吧。我想是这样。

不保证对啊。我刚开始学习。

论坛徽章:
0
10 [报告]
发表于 2003-02-10 17:32 |只看该作者

这个问题向不明白,求教。。。。

好象有道理哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP