当前位置: 技术问答>linux和unix
关于两个程序的输出
来源: 互联网 发布时间:2016-03-21
本文导语: 程序1: #include #include #include #include #include main() { int fd; int pid; char msg1[]="Test 1 2 3 ..n"; char msg2[]="Hello, hellon"; if((fd=creat("testfile",0644))==-1) return 0; if(write(fd,msg1,strlen(msg1))==-1) return 0; pid=fork(); swit...
程序1:
#include
#include
#include
#include
#include
main()
{
int fd;
int pid;
char msg1[]="Test 1 2 3 ..n";
char msg2[]="Hello, hellon";
if((fd=creat("testfile",0644))==-1)
return 0;
if(write(fd,msg1,strlen(msg1))==-1)
return 0;
pid=fork();
switch(pid)
{
case -1:
exit(0);
case 0:
break;
default:
wait(NULL);
}
if(write(fd,msg2,strlen(msg2))==-1)
return 0;
close(fd);
return 1;
}
程序2:
#include
#include
main()
{
FILE * fp;
int pid;
char msg1[]="Test 1 2 3 ..n";
char msg2[]="Hello, hellon";
if((fp=fopen("testfile2","w"))==NULL)
return 0;
fprintf(fp,"%s",msg1);
pid=fork();
switch(pid)
{
case -1:
exit(0);
case 0:
break;
default:
wait(NULL);
}
fprintf(fp,"%s",msg2);
close(fp);
return 1;
}
最终输出的testfile文件和testfile2文件的内容是不一样的,请问其应该输出什么?为什么?
#include
#include
#include
#include
#include
main()
{
int fd;
int pid;
char msg1[]="Test 1 2 3 ..n";
char msg2[]="Hello, hellon";
if((fd=creat("testfile",0644))==-1)
return 0;
if(write(fd,msg1,strlen(msg1))==-1)
return 0;
pid=fork();
switch(pid)
{
case -1:
exit(0);
case 0:
break;
default:
wait(NULL);
}
if(write(fd,msg2,strlen(msg2))==-1)
return 0;
close(fd);
return 1;
}
程序2:
#include
#include
main()
{
FILE * fp;
int pid;
char msg1[]="Test 1 2 3 ..n";
char msg2[]="Hello, hellon";
if((fp=fopen("testfile2","w"))==NULL)
return 0;
fprintf(fp,"%s",msg1);
pid=fork();
switch(pid)
{
case -1:
exit(0);
case 0:
break;
default:
wait(NULL);
}
fprintf(fp,"%s",msg2);
close(fp);
return 1;
}
最终输出的testfile文件和testfile2文件的内容是不一样的,请问其应该输出什么?为什么?
|
程序的输出是正确的,之所以输出的内容不一样,是因为 程序2使用的标准C库中的函数,
而这些函数是带缓冲的,所以fp 中保存了 上一次写如的内容,从而导致,在子进程中,
内容又被些了一遍。
你可以尝试一下,使用fflush 函数清理缓冲区,这样,两个程序的输出就完全一样了。
fprintf(fp,"%s",msg1);
fflush(fp);
而这些函数是带缓冲的,所以fp 中保存了 上一次写如的内容,从而导致,在子进程中,
内容又被些了一遍。
你可以尝试一下,使用fflush 函数清理缓冲区,这样,两个程序的输出就完全一样了。
fprintf(fp,"%s",msg1);
fflush(fp);