Advertisement
Guest User

Untitled

a guest
Jun 25th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. #include <signal.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <sys/sem.h>
  5. #include <unistd.h>
  6.  
  7. #define SEM_COUNT 16
  8. #define SEM_FSYNC "/tmp/sem.temp", 1
  9.  
  10. union semun {
  11. int val;
  12. struct semid_ds *buf;
  13. unsigned short *array;
  14. } arg;
  15.  
  16. int semid;
  17.  
  18. /* SIGINT handler for delete semophores */
  19. void sigint_handler(int signo) {
  20. /* Delete semaphores */
  21. int result = semctl(semid, SEM_COUNT, IPC_RMID);
  22. if (result == -1)
  23. perror("No can delete XSI semophores: ");
  24.  
  25. printf("Exit from program.\n");
  26.  
  27. exit(0);
  28. }
  29.  
  30. int main() {
  31. /* Get key from ftok() */
  32. key_t key = ftok(SEM_FSYNC);
  33.  
  34. /* Create XSI semaphores */
  35. semid = semget(key, SEM_COUNT, IPC_CREAT | IPC_EXCL | 0666);
  36. if (semid == -1) {
  37. perror("No can create semophores: ");
  38. return -1;
  39. }
  40.  
  41. printf("Make semaphores with SEMID: %d\n", semid);
  42.  
  43. unsigned short array[SEM_COUNT];
  44. for (int i = 0; i < SEM_COUNT; i++)
  45. array[i] = i;
  46. arg.array = array;
  47.  
  48. int result = semctl(semid, 0, SETALL, arg);
  49. if (result == -1) {
  50. perror("No can init semophores: ");
  51. }
  52.  
  53. /* Getting values from semophores */
  54. int value;
  55. for (int i = 0; i < SEM_COUNT; i++) {
  56. value = semctl(semid, i, GETVAL);
  57. printf("sem[%02d] have value: %d\n", i, value);
  58. }
  59.  
  60. /* Set signal handlers */
  61. struct sigaction siga;
  62. siga.sa_handler = sigint_handler;
  63. sigemptyset(&siga.sa_mask);
  64. siga.sa_flags = 0;
  65.  
  66. sigaction(SIGINT, &siga, NULL);
  67. sigaction(SIGTERM, &siga, NULL);
  68. sigaction(SIGABRT, &siga, NULL);
  69.  
  70. /* Waiting Ctrl+C */
  71. for(;;)
  72. pause();
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement