#include <fcntl.h>
#include <stdlib.h>
int fdrd,fdwt;
char c;
void rdwrt();
main(int argc,char *argv[])
{
if(argc!=3)
exit(1);
if((fdrd=open(argv[1],O_RDONLY))==-1)
exit(1);
if((fdwt=creat(argv[2],0666))==01)
exit(1);
fork();
rdwrt();
exit(0);
}
void rdwrt()
{
for(;;)
{
if(read(fdrd,&c,1)!=1)
return;
write(fdwt,&c,1);
}
}
该程序分叉一个子进程,然后父进程和子进程尝试读取相同的输入文件并写入相同的输出文件。
像这样执行这个程序:
[root@localhost]./a.out input output
其中输入文件的内容是:
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
我认为输出文件应该与输入文件具有相同数量的字符,尽管根据这两个进程的竞争,字符顺序可能不一样。
原来输出文件是:
abcdefghijklmnonqbcdefghijklwxyczdefjklpqrstuvwxyz
abcefgklmvwxefgklmnopqrstuvw
qrstuyz
abcdhijxyz
实际上,这两个文件有不同的字符编号:
[root@localhost]wc -m input output
162 input
98 output
现在我想知道为什么?