这个程序的结果是?原因?

bbjjll0331 2010-01-30 04:00:26
1 #include <stdio.h>
2 #include <unistd.h>
3 int main(void)
4 {
5 pid_t pid;
6
7 write(1, "hello", sizeof("hello"));
8
9 printf(" world!\r");
10 //fflush(NULL);
11
12 pid = fork();
13
14 return 0;
15 }
...全文
92 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianjinno04 2010-01-30
  • 打赏
  • 举报
回复
还有,7楼正解
smilefox 2010-01-30
  • 打赏
  • 举报
回复
D:\code\test\main1.c(2) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory

哈哈,unistd.h 这个在unix/linux下才有的

你是在windows上编译的吧?

你这个程序用到了fork pid_t这些,只能在unix/linux下编译。。。
bbjjll0331 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hpsmouse 的回复:]
晕,你是说那个 \r 啊。
\r 是把光标移动到一行开头(不换行),于是程序退出的时候命令行的提示符就把输出覆盖掉了。

这样效果比较明显:
printf(" world!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r");

还有那个 sizeof("hello") 也是有问题的,会把最后的 \0 一起算在内(不过好像可以无视之)。
[/Quote]

OK,知道了,谢谢。

原来的程序改为:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
write(1, "hellobbbbbbbbbbbbbbbbb", sizeof("hellobbbbbbbbbbbbbbbb"));
printf(" world!\r");
fork();
return 0;
}
这样就可以看到效果了.其实原来加了\r也已经输出了,只不过没换行被遮挡住了。
bbjjll0331 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tianjinno04 的回复:]
为什么要PID = fork();??
[/Quote]

对于这个程序里来说加个PID=没用。
tianjinno04 2010-01-30
  • 打赏
  • 举报
回复
为什么要PID = fork();??
2010-01-30
  • 打赏
  • 举报
回复
晕,你是说那个 \r 啊。
\r 是把光标移动到一行开头(不换行),于是程序退出的时候命令行的提示符就把输出覆盖掉了。

这样效果比较明显:
printf(" world!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r");

还有那个 sizeof("hello") 也是有问题的,会把最后的 \0 一起算在内(不过好像可以无视之)。
bbjjll0331 2010-01-30
  • 打赏
  • 举报
回复
原程序改为下面这样就可以正常输出,但是把\n改为\r后,再加上fflush(NULL)都不显示结果,是什么原因?
1 #include <stdio.h>
2 #include <unistd.h>
3 int main(void)
4 {
5 pid_t pid;
6
7 write(1, "hello", sizeof("hello"));
8
9 printf(" world!\n");
11
12 pid = fork();
13
14 return 0;
15 }
bbjjll0331 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hpsmouse 的回复:]
如果不执行 fflush 的话,fork 的时候输出缓冲还没有刷新,所以 fork 以后两个进程都会输出。
[/Quote]
但是这个没结果所怎么回事?

1 #include <stdio.h>
2 #include <unistd.h>
3 int main(void)
4 {
5 pid_t pid;
6
7 write(1, "hello", sizeof("hello"));
8
9 printf(" world!\r");
10 fflush(NULL);
11
12 pid = fork();
13
14 return 0;
15 }
2010-01-30
  • 打赏
  • 举报
回复
如果不执行 fflush 的话,fork 的时候输出缓冲还没有刷新,所以 fork 以后两个进程都会输出。
Bird_Conan 2010-01-30
  • 打赏
  • 举报
回复
D:\code\test\main1.c(2) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
lovesi3344 2010-01-30
  • 打赏
  • 举报
回复
fflush(); 好像没有参数才对哦
bbjjll0331 2010-01-30
  • 打赏
  • 举报
回复
错了 ,是把第10行//去掉

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧