|
藍森林 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 |
| |