summaryrefslogtreecommitdiffstats
path: root/clib/mq.h
blob: 23657c68048d13464b22e4710648f9baabc36645 (plain)
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
140
141
142
143
144
145
146
147
148
149
150
151
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: clib/mq.h $                                                   */
/*                                                                        */
/* OpenPOWER FFS Project                                                  */
/*                                                                        */
/* Contributors Listed Below - COPYRIGHT 2014,2015                        */
/* [+] International Business Machines Corp.                              */
/*                                                                        */
/*                                                                        */
/* Licensed under the Apache License, Version 2.0 (the "License");        */
/* you may not use this file except in compliance with the License.       */
/* You may obtain a copy of the License at                                */
/*                                                                        */
/*     http://www.apache.org/licenses/LICENSE-2.0                         */
/*                                                                        */
/* Unless required by applicable law or agreed to in writing, software    */
/* distributed under the License is distributed on an "AS IS" BASIS,      */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
/* implied. See the License for the specific language governing           */
/* permissions and limitations under the License.                         */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */

/*!
 * @file mqueue.h
 * @brief Message queues
 * @author Shaun Wetzstein <shaun@us.ibm.com>
 * @date 2010-2011
 */

#ifndef __MQUEUE_H__
#define __MQUEUE_H__

#include <stdint.h>
#include <stdbool.h>
#include <mqueue.h>

#include "attribute.h"

/* ==================================================================== */

typedef struct mqueue mqueue_t;	//!< Alias for the @em mqueue class
typedef struct mq_attr mqueue_attr_t;

#define	INIT_MQUEUE	{NULL,-1,-1}

/*!
 * @brief POSIX message queues
 */
struct mqueue {
	char *service;		//!< Message queue name

	mqd_t in;		//!< Inbound message queue
	mqd_t out;		//!< Outbound message queue
};

/* ==================================================================== */

/*!
 * @brief Constructs a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param service [in] mqueue service name
 * @return None
 * @throws UNEXPECTED if @em self pointer is NULL
 */
extern int mqueue_init(mqueue_t *, const char *)
/*! @cond */
__nonnull((1, 2)) /*! @endcond */ ;

/*!
 * @brief Destructs a @em mqueue object
 * @details Closes all message queues associated with this \em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @return None
 */
extern int mqueue_delete(mqueue_t *)
/*! @cond */
__nonnull((1)) /*! @endcond */ ;

/*!
 * @brief Create the server-side of a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param tid [in] thread id
 * @return None
 */
extern int mqueue_create(mqueue_t *, pid_t)
/*! @cond */
__nonnull((1)) /*! @endcond */ ;

/*!
 * @brief Create the client-side of a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param path [in] FIX ME
 * @return None
 */
extern int mqueue_open(mqueue_t *, char *)
/*! @cond */
__nonnull((1, 2)) /*! @endcond */ ;

/*!
 * @brief Close a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param path [in] FIX ME
 * @return None
 */
extern int mqueue_close(mqueue_t *, char *)
/*! @cond */
__nonnull((1, 2)) /*! @endcond */ ;

/*!
 * @brief Get message queue operating attributes of a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @return Initialized mqueue_attr object
 */
extern mqueue_attr_t mqueue_getattr(mqueue_t *)
/*! @cond */
__nonnull((1)) /*! @endcond */ ;

/*!
 * @brief Write (send) a message to a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param ptr [in] Reference to data bytes to send
 * @param ptr [in] Length (in bytes) of the data bytes
 * @return non-0 on success, 0 othereise
 */
extern int mqueue_send(mqueue_t *, void *, size_t)
/*! @cond */
__nonnull((1, 2)) /*! @endcond */ ;

/*!
 * @brief Read (receive) a message from a @em mqueue object
 * @memberof mqueue
 * @param self [in] mqueue object @em self pointer
 * @param ptr [out] Reference to data bytes to send
 * @param ptr [in] Length (in bytes) of the buffer referenced by @em ptr
 * @return non-0 on success, 0 othereise
 */
extern int mqueue_receive(mqueue_t *, void *, size_t)
/*! @cond */
__nonnull((1, 2)) /*! @endcond */ ;

#endif				/* __MQUEUE_H__ */
OpenPOWER on IntegriCloud