쓰래드 두개를 돌아가는 프로그램 입니다.


1쓰래드는 이더넷 통신을 주기적으로 하는 쓰래드

2스래드는 파일은 복사하고 압축하여 압축 파일 전송하는 쓰래드


평상시에는 1번 쓰래드가 통신에는 큰 문제는 없는데 2번 쓰래드에서

파일 복사후 압축을 하는 과정에서 1번 쓰래드가 통신이 안됩니다.


압축 관련하여 fork()함수가 수행 될때 1번 쓰래드가 홀드가 되는것 같은데.

이걸 해결 할수 있는 방법이 뭐가 있을까.?


야래의 코드가 2번 쓰래드에서 파일 복사후 압축하는 함수 입니다.

int nand_comm_file(u8 *SrcFile, u8 *DestFile, u32 iSize) {
 char srcfile[100], distfile[100];
 int copy_len = 0;
 char xz_cmd[128];
 int ret = 0;

 u32 s1, s2;

 pid_t pid;
 int status;

 struct stat statx;

 s1 = gettime1000();

 copy_len = nand_copy_file(SrcFile, SrcFile, iSize);
 if(copy_len == iSize) {
  sprintf(DestFile, "%s.xz", SrcFile);
  sprintf(srcfile, "%s/%s", TMP_PATH, SrcFile);
  sprintf(distfile, "%s/%s", TMP_PATH, DestFile);

  pid = fork();
//  printf("fork()=%d\r\n", pid);
  switch(pid) {
   case -1:
    printf("Compress Fault\r\n");
    ret = 0;
   break;

   case 0:
    execl("/usr/bin/xz", "xz", "-2", srcfile, (char*)0);
   break;

   default:
    wait((int*)0);
//    printf("main Compress Success\r\n");
   break;
  }

  stat(distfile, &statx);
  ret = statx.st_size;
  if(ret <= 0) {
   ret = 0;
  }  
 }
 else {
  printf("Nand Copy Fail.\r\n");
  ret = 0;
 }

 s2 = gettime1000();
 printf("copy to temp, Comprres done.[%s:%d](%u ms)\n", distfile, ret, (s2 - s1));

 return ret; 
}