#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
出力ファイルは入力ファイルと同じ文字数である必要があると思いましたが、これら2つのプロセスの競合によると、文字の順序はおそらく同じではありません。
出力ファイルは次のようになります。
abcdefghijklmnonqbcdefghijklwxyczdefjklpqrstuvwxyz
abcefgklmvwxefgklmnopqrstuvw
qrstuyz
abcdhijxyz
実際には、これらの tow ファイルの文字数は異なります。
[root@localhost]wc -m input output
162 input
98 output
なぜだろう?