File: msg_queue.c

package info (click to toggle)
systemtap 4.8-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 39,000 kB
  • sloc: cpp: 78,785; ansic: 62,419; xml: 49,443; exp: 42,735; sh: 11,254; python: 3,062; perl: 2,252; tcl: 1,305; makefile: 1,072; lisp: 105; awk: 101; asm: 91; java: 56; sed: 16
file content (111 lines) | stat: -rw-r--r-- 3,237 bytes parent folder | download | duplicates (5)
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
/* COVERAGE: msgget msgsnd msgrcv msgctl */
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/wait.h>
     
#define MSGTXTLEN 128   // msg text length

struct msg_buf {
    long mtype;
    char mtext[MSGTXTLEN];
} msg;

int
main(int argc, char **argv)
{
    int msgqid;

    // Test basic operation.

    // create a message queue.
    msgqid = msgget(IPC_PRIVATE, IPC_CREAT|IPC_EXCL|0600);
    //staptest// msgget (IPC_PRIVATE, IPC_CREAT|IPC_EXCL|0600) = NNNN
  
    // create a message to send
    msg.mtype = 1;
    strcpy(msg.mtext, "a text msg...\n");

    // send the message to queue
    msgsnd(msgqid, &msg, sizeof(msg), IPC_NOWAIT);
    //staptest// msgsnd (NNNN, XXXX, NNNN, IPC_NOWAIT) = NNNN

    // read the message from queue
    msgrcv(msgqid, &msg, sizeof(msg), 0, 0); 
    //staptest// msgrcv (NNNN, XXXX, NNNN, 0, 0x0) = NNNN

    // remove the queue
    msgctl(msgqid, IPC_RMID, NULL);
    //staptest// msgctl (NNNN, [[[[IPC_64|]]]]?IPC_RMID, 0x0) = 0

    // Range checking.

    msgqid = msgget((key_t)-1, IPC_CREAT|IPC_EXCL|0600);
    //staptest// msgget (-1, IPC_CREAT|IPC_EXCL|0600) = NNNN

    msgsnd(-1, &msg, sizeof(msg), 0);
    //staptest// msgsnd (-1, XXXX, NNNN, 0x0) = NNNN

    msgsnd(msgqid, (void *)-1, sizeof(msg), 0);
#ifdef __s390__
    //staptest// msgsnd (NNNN, 0x[7]?[f]+, NNNN, 0x0) = NNNN
#else
    //staptest// msgsnd (NNNN, 0x[f]+, NNNN, 0x0) = NNNN
#endif

    msgsnd(msgqid, &msg, (size_t)-1, 0);
#if __WORDSIZE == 64
    //staptest// msgsnd (NNNN, XXXX, 18446744073709551615, 0x0) = NNNN
#else
    //staptest// msgsnd (NNNN, XXXX, 4294967295, 0x0) = NNNN
#endif

    msgsnd(msgqid, &msg, sizeof(msg), -1);
    //staptest// msgsnd (NNNN, XXXX, NNNN, [[[[MSG!!!!IPC]]]]_[^ ]+|XXXX) = NNNN

    msgrcv(-1, &msg, sizeof(msg), 0, 0); 
    //staptest// msgrcv (-1, XXXX, NNNN, 0, 0x0) = NNNN

    msgrcv(msgqid, (void *)-1, sizeof(msg), 0, 0); 
#ifdef __s390__
    //staptest// msgrcv (NNNN, 0x[7]?[f]+, NNNN, 0, 0x0) = NNNN
#else
    //staptest// msgrcv (NNNN, 0x[f]+, NNNN, 0, 0x0) = NNNN
#endif

    msgrcv(msgqid, &msg, (size_t)-1, 0, 0); 
#if __WORDSIZE == 64
    //staptest// msgrcv (NNNN, XXXX, 18446744073709551615, 0, 0x0) = NNNN
#else
    //staptest// msgrcv (NNNN, XXXX, 4294967295, 0, 0x0) = NNNN
#endif

    msgrcv(msgqid, &msg, sizeof(msg), -1, IPC_NOWAIT); 
    //staptest// msgrcv (NNNN, XXXX, NNNN, -1, IPC_NOWAIT) = NNNN

    msgrcv(msgqid, &msg, sizeof(msg), 0, -1); 
    //staptest// msgrcv (NNNN, XXXX, NNNN, 0, [[[[MSG!!!!IPC]]]]_[^ ]+|XXXX) = NNNN

    msgctl(msgqid, IPC_RMID, NULL);
    //staptest// msgctl (NNNN, [[[[IPC_64|]]]]?IPC_RMID, 0x0) = NNNN

    msgqid = msgget(IPC_PRIVATE, -1);
    //staptest// msgget (IPC_PRIVATE, IPC_[^ ]+|XXXX|0777) = NNNN

    msgctl(msgqid, IPC_RMID, NULL);
    //staptest// msgctl (NNNN, [[[[IPC_64|]]]]?IPC_RMID, 0x0) = NNNN

    msgctl(msgqid, -1, NULL);
    //staptest// msgctl (NNNN, [[[[IPC_64|]]]]?XXXX, 0x0) = NNNN

    msgctl(msgqid, IPC_RMID, (struct msqid_ds *)-1);
#ifdef __s390__
    //staptest// msgctl (NNNN, [[[[IPC_64|]]]]?IPC_RMID, 0x[7]?[f]+) = NNNN
#else
    //staptest// msgctl (NNNN, [[[[IPC_64|]]]]?IPC_RMID, 0x[f]+) = NNNN
#endif

    return 0;
}