xref: /PHP-7.2/ext/sysvsem/tests/sysv.phpt (revision 0b648a42)
1--TEST--
2General semaphore and shared memory test
3--SKIPIF--
4<?php // vim600: ts=4 sw=4 syn=php fdm=marker
5if(!extension_loaded('sysvsem') || !extension_loaded('sysvshm')) {
6	die("skip Both sysvsem and sysvshm required");
7}
8?>
9--FILE--
10<?php
11$MEMSIZE = 512;  //  size of shared memory to allocate
12$SEMKEY	 =   ftok(__FILE__, 'P');  //  Semaphore key
13$SHMKEY	 =   ftok(__FILE__, 'Q');  //  Shared memory key
14
15echo "Start.\n";
16// Get semaphore
17$sem_id = sem_get($SEMKEY, 1);
18if ($sem_id === FALSE) {
19	echo "Fail to get semaphore";
20	exit;
21}
22echo "Got semaphore $sem_id.\n";
23
24// Accuire semaphore
25if (! sem_acquire($sem_id)) {
26	echo "Fail to acquire semaphore $sem_id.\n";
27	sem_remove($sem_id);
28	exit;
29}
30echo "Success acquire semaphore $sem_id.\n";
31
32$shm_id =   shm_attach($SHMKEY, $MEMSIZE);
33if ($shm_id === FALSE) {
34	echo "Fail to attach shared memory.\n";
35	sem_remove($sem_id);
36	exit;
37}
38echo "Success to attach shared memory : $shm_id.\n";
39
40// Write variable 1
41if (!shm_put_var($shm_id, 1, "Variable 1")) {
42	echo "Fail to put var 1 on shared memory $shm_id.\n";
43	sem_remove($sem_id);
44	shm_remove ($shm_id);
45	exit;
46}
47echo "Write var1 to shared memory.\n";
48
49// Write variable 2
50if (!shm_put_var($shm_id, 2, "Variable 2")) {
51	echo "Fail to put var 2 on shared memory $shm_id.\n";
52	sem_remove($sem_id);
53	shm_remove ($shm_id);
54	exit;
55}
56echo "Write var2 to shared memory.\n";
57
58// Read variable 1
59$var1   =   shm_get_var ($shm_id, 1);
60if ($var1 === FALSE) {
61	echo "Fail to retrieve Var 1 from Shared memory $shm_id, return value=$var1.\n";
62} else {
63	echo "Read var1=$var1.\n";
64}
65
66// Read variable 1
67$var2   =   shm_get_var ($shm_id, 2);
68if ($var1 === FALSE) {
69	echo "Fail to retrieve Var 2 from Shared memory $shm_id, return value=$var2.\n";
70} else {
71	echo "Read var2=$var2.\n";
72}
73// Release semaphore
74if (!sem_release($sem_id)) {
75	echo "Fail to release $sem_id semaphore.\n";
76} else {
77	echo "Semaphore $sem_id released.\n";
78}
79
80// remove shared memory segmant from SysV
81if (shm_remove ($shm_id)) {
82	echo "Shared memory successfully removed from SysV.\n";
83} else {
84	echo "Fail to remove $shm_id shared memory from SysV.\n";
85}
86
87// Remove semaphore
88if (sem_remove($sem_id)) {
89	echo "semaphore removed successfully from SysV.\n";
90} else {
91	echo "Fail to remove $sem_id semaphore from SysV.\n";
92}
93echo "End.\n";
94/* NOTE: assigned semids differ depending on the kernel, since
95 *       there are actually 3 semaphores per PHP-created
96 *       semaphores in effect, to keep state information.
97 *       That's the reason for EXPECTF.
98 */
99?>
100--EXPECTF--
101Start.
102Got semaphore Resource id #%i.
103Success acquire semaphore Resource id #%i.
104Success to attach shared memory : %s.
105Write var1 to shared memory.
106Write var2 to shared memory.
107Read var1=Variable 1.
108Read var2=Variable 2.
109Semaphore Resource id #%s released.
110Shared memory successfully removed from SysV.
111semaphore removed successfully from SysV.
112End.
113