2013-04-08 3 views
0

Я пытаюсь получить висячие семафоры. Я написал программу, которая занимается семафорами и в которой у меня есть эта функция для создания единого семафора:Почему семафор извлекается и не создается?

int semcreate() 
{ 
    semp = semget(ftok("./output.txt", 'a'),1,IPC_CREAT|IPC_EXCL|0664); 

    if(semp == -1) /*Semaphore exists, fetch*/ 
    { 
     printf("Semaphore fetched\n"); 
     semp = semget(ftok("./output.txt", 'a'), 1, 0); 
    } 
    else if(semp>=0) /*Semaphore created here*/ 
    { 
     printf("Semaphore created\n"); 
     seminit(); /* Initialize semaphore*/ 
    } 
    return 1; 
} 

Когда я запускаю эту программу из двух отдельных терминалов, как экземпляры печати Semaphore fetched. Это правильное поведение? Зачем?

enter image description here

ответ

0

Вероятно, семафор существует в системе. Используйте команду ipcs, чтобы перечислить весь семафор в системе и удалить семафор, созданный вашей программой, с помощью ipcrm.