日期:2014-05-16  浏览次数:20737 次

UNIX 新手一问 关于fork 和 2进程同时写一文件出现的问题
下面一段程序运行会死!   请问是什么原因呢?
#include   <sys/types.h>
#include   <sys/stat.h>
#include   <fcntl.h>
#include   <stdio.h>
#include   <unistd.h>

typedef   int   XFILE;
typedef   enum   _BOOL{FALSE,TRUE}   BOOL;
BOOL   IsFileCanbeSeek(XFILE   file);

const   char   buf1[]= "abcdefghijklmnopqrstuvwxyz\n ";
const   char   buf2[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZ\n ";
const   char   buf3[]= "--------------------------\n ";
int   count=0;
char   buf4[8];
int   main(void)
{              
XFILE   file=open( "testfile.t ",O_RDWR|O_CREAT|O_TRUNC);
                  write(file,buf3,sizeof(buf3));
int   pid,cpid,cpid2;
pid=fork();
if(pid==0)   cpid=getpid();
                  if(cpid==getpid())   printf( "%d\n ",cpid);
                  if(cpid!=getpid())   pid=fork();
                  if(pid==0&&cpid!=getpid())cpid2=getpid();//.............
                  if(pid!=0)exit(0);
                  int   i=0;
                  for(i=0;i <20;i++)
                  {
                  printf( "%d-------%d---------%d\n ",getpid(),cpid,cpid2);
                  if(cpid==getpid())  
                  {          
                  sprintf(buf4, "%d\t ",count);
                  count++;
                  write(file,buf4,sizeof(buf4));
                  write(file,buf1,sizeof(buf1));
                  sleep(1);
                  }
                    if(cpid2==getpid())
                  {
                  sprintf(buf4, "%d\t ",count);
                  count++;
                  write(file,buf4,sizeof(buf4));
                  write(file,buf2,sizeof(buf1));
                  sleep(1);
                  }
                  }
close(file);
}


------解决方案--------------------
执行没问题.

不过你fork那逻辑太混乱了,还有点问题.

如果你那死掉的话,可能是cpid,cpid2的初值的问题.赋初值再试一下.

[root@shwhg tes