Portál AbcLinuxu, 9. listopadu 2025 05:02
Dobry den,
potreboval by som poradit s nastavovanim semaforov. Co mi nejde do hlavy je, preco tento kod:
/* Semaphores */
union semun semUnion;
/* Creating semaphore 1 */
if ((sem1ID=semget(keySem1,2,IPC_CREAT|0666)) == -1) {
perror("zadanie: semaphore1: ");
exit (6);
}
/* Setting semaphore 1 */
/* Allowing proc_t writing */
semUnion.val=1;
if ((semctl(sem1ID,0,SETVAL,semUnion)) == -1) {
perror("zadanie: semaphore1: ");
exit (7);
}
/* Denying proc_s reading */
semUnion.val=0;
if ((semctl(sem1ID,1,SETVAL,semUnion)) == -1) {
perror("zadanie: semaphore1: ");
exit (7);
}
/* Creating semaphore 2 */
if ((sem2ID=semget(keySem2,2,IPC_CREAT|0666)) == -1) {
perror("zadanie: semaphore2: ");
exit (6);
}
/* Setting semaphore 2 */
/* Allowing proc_s writing */
semUnion.val=1;
if ((semctl(sem2ID,0,SETVAL,semUnion)) == -1) {
perror("zadanie: semaphore1: ");
exit (7);
}
/* Denying proc_d reading */
semUnion.val=0;
if ((semctl(sem2ID,1,SETVAL,semUnion)) == -1) {
perror("zadanie: semaphore2: ");
exit (7);
}
fprintf(stdout,"zadanie: sem1[0]: %d\n",semctl(sem1ID,0,GETVAL,semUnion));
fprintf(stdout,"zadanie: sem1[1]: %d\n",semctl(sem1ID,1,GETVAL,semUnion));
fprintf(stdout,"zadanie: sem2[0]: %d\n",semctl(sem2ID,0,GETVAL,semUnion));
fprintf(stdout,"zadanie: sem2[1]: %d\n",semctl(sem2ID,1,GETVAL,semUnion));
dava takyto vypis:
zadanie: sem1[0]: 1 zadanie: sem1[1]: 0 zadanie: sem2[0]: 0 zadanie: sem2[1]: 0Dakujem za napady.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.