|
|
|
семафоры, процессы, etc, разделяемая память
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Честно признаюсь - близится сессия, поэтому необходима помощь компетентных специалистов. Стоит следующая задача Cоздать два дочерних процесса. Родительский процесс создаёт семафор (сем1) и разделяемую память. Оба дочерних процесса непрерывно записывают в разделяемую память по 100 строк вида: номер_строки pid_процесса текущее_время (мсек). Всего процессы должны записать 1000 строк. Семафор сем1 используется процессами для разрешения кому из процессов получить доступ к разделяемой памяти. Родительский процесс читает из файла по 75 строк и выводит их на экран. Дочерние процессы начинают операции с файлом после получения сигнала SIGUSR1 от родительского процесса. Вот мой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. Проблема в том, что на экран выводится только 1-ые 75 строк. Как организовать вывод остальных? Подозреваю, что затык где-то в том месте, где должно происходить считывание следующих 75 строк. Это или Код: plaintext 1. Код: plaintext 1. Как это исправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 00:48 |
|
||
|
семафоры, процессы, etc, разделяемая память
|
|||
|---|---|---|---|
|
#18+
24spam@tut.by, Странно, что у Вас она вообще скомпилировалась. У меня скомпилировалась после изменений: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. предупреждения, так как вместо Код: plaintext 1. 2. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 04:59 |
|
||
|
семафоры, процессы, etc, разделяемая память
|
|||
|---|---|---|---|
|
#18+
Большое спасибо за помощь. Я только не совсем понял на счёт rcsdiff -r1.1 tshm.c 1c1 < #include <linux/sem.h> --- > // #include <linux/sem.h> 2a3 > #include <sys/sem.h> 17a19,25 > union semun > { > int val; // value for SETVAL > struct semid_ds *buf; // buffer for IPC_STAT & IPC_SET > unsigned short int *array; // array for GETALL & SETALL > struct seminfo *__buf; // buffer for IPC_INFO > }; Это нужно вставить вместо union semun arg; ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 10:34 |
|
||
|
семафоры, процессы, etc, разделяемая память
|
|||
|---|---|---|---|
|
#18+
24spam@tut.by, 24spam@tut.by Большое спасибо за помощь. Я только не совсем понял на счёт rcsdiff -r1.1 tshm.c ...Это означает, что программа была сохранена под именем tshm.c и сразу передана под управление RCS. Команда rcsdiff показывает разницу между текущем состоянием файла и указанной версией в RCS-файле. Читайте man rcs ci rcsdiff. Код: plaintext 1. 2. 3. 4. строкой "// #include <linux/sem.h>" в текущем. Код: plaintext 1. с номером 17 в исходном файле добавлено определение union-а semun. То есть, иными словами, вместо "linux/sem.h" нужно включать ""sys/sem.h". так как это написано в man-е по semop, semctl и т.д, и нужно определять самостоятельно union semun так, как это написано вman semctl Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 16:26 |
|
||
|
семафоры, процессы, etc, разделяемая память
|
|||
|---|---|---|---|
|
#18+
Большое спасибо. Буду пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 16:40 |
|
||
|
семафоры, процессы, etc, разделяемая память
|
|||
|---|---|---|---|
|
#18+
2 avb1003 ОГРОМНОЕ СПАСИБО!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2010, 22:15 |
|
||
|
семафоры, процессы, etc, разделяемая память
|
|||
|---|---|---|---|
|
#18+
А вот ещё такой вопос. Как сделать так, чтобы родительский процесс посылал сигнал SIGUSR1 одновременно 2 процессам сразу? Т.е., чем нужно заменить строки ? Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2010, 12:38 |
|
||
|
|

start [/forum/topic.php?fid=25&msg=36615689&tid=1484940]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 419ms |

| 0 / 0 |
