藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18


信號問題,為什麼父進程5S鍾後而不是60S後執行的啊?

[code]#include<stdio.h>;
#include<sys/types.h>;
#include<sys/ipc.h>;
#include<sys/sem.h>;
#include<unistd.h>;
#define SEMK 0x12345L
#define PERMS 0666
#define DEBUG
static struct sembuf op[2]={0,-1,0,
                            0, 1,0};
int InitSem()
{
return    semget(SEMK,1,PERMS|IPC_CREAT);
}

int SemDel(int sem)
{
return semctl(sem,0,IPC_RMID,0) ;
}

int SetSem( int sem)
{
union semun {
       int val;
       struct semid_ds *buf;
       ushort *array;
  } arg;

  
  arg.val=0;
  return semctl(sem,0,SETVAL,arg);
}


int P()
{
  int semid;
  
  semid=semget(SEMK,1,PERMS);
  if (semid<0) return -1;
  return(semop(semid,&op[0],0));
}

int V()
{
  int semid;
  
  semid=semget(SEMK,1,PERMS);
  if (semid<0) return -1;
  return(semop(semid,&op[1],0));
}
main()
{
   int semid;
   int rc;
   pid_t  pid;
   
   rc = InitSem();
   if(rc<0)
   {
     perror("create sem error");
     exit(0);
   }
   semid=rc;
   rc =  SetSem(semid);
   if(rc<0)
   {
     perror("set sem");
     system("ipcs -as");
    }
   pid=fork();
   if(pid==0)
   {
     P();
     sleep(60);
     V();
   }
   if(pid>;0)
   {
     sleep(5);
     P();
     printf("this is the parents do:\n");
     system("ls -l|more");
     V();
   }  
   rc=SemDel(semid);
   if(rc<0)
   {
     perror("del sem");
     system("ipcs -as");
   }
}
[/code]

信號問題,為什麼父進程5S鍾後而不是60S後執行的啊?

fork
父進程返回pid
子進程返回0



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com