aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-06-14 19:43:37 +0200
committerMattias Andrée <maandree@operamail.com>2014-06-14 19:43:37 +0200
commit078303e4e488c1fdb431815f2fff85b7f0597397 (patch)
tree4712bcd34e9921e601ae69e7102082ef8cdfe3a1
parentfix small errors (diff)
downloadcmdipc-078303e4e488c1fdb431815f2fff85b7f0597397.tar.gz
cmdipc-078303e4e488c1fdb431815f2fff85b7f0597397.tar.bz2
cmdipc-078303e4e488c1fdb431815f2fff85b7f0597397.tar.xz
finish common api for mqueue
Signed-off-by: Mattias Andrée <maandree@operamail.com>
-rwxr-xr-xsrc/cmdipc15
-rw-r--r--src/unified_sysv_ipc.py6
2 files changed, 14 insertions, 7 deletions
diff --git a/src/cmdipc b/src/cmdipc
index 170303a..740756d 100755
--- a/src/cmdipc
+++ b/src/cmdipc
@@ -47,6 +47,7 @@ parser.add_argumentless(['-h', '-?', '--help'], 0, 'Prints this help m
parser.add_argumented (['-k', '--key'], 0, 'KEY', 'The key (SysV) or name (POSIX) of the item')
parser.add_argumented (['-m', '--mode'], 0, 'OCTAL', 'The mode for the item')
parser.add_argumented (['-s', '--size'], 0, 'SIZE', 'Maximum size for messages')
+parser.add_argumented (['-z', '--spool'], 0, 'SIZE', 'Maximum number of messages')
parser.add_argumented (['-t', '--type'], 0, 'TYPE', 'Message type')
parser.add_argumented (['-p', '--priority'], 0, 'PRIO', 'Message priority')
parser.add_argumented (['-d', '--delta'], 0, 'DELTA', 'Semaphore value increment')
@@ -91,17 +92,20 @@ try:
print(ipc.ftok(parser.files[0], int(parser.files[1]), silence_warning = True))
elif parser.opts['--mqueue'] is not None:
- key, flags, mode, size, type, timeout = None, 0, 0o600, 2048, None, None
+ key, flags, mode, spool, size, type, timeout = None, 0, 0o600, 10, 8192, None, None
+ if not use_posix:
+ spool, size = 1, 2048
if parser.opts['--nonblocking'] is not None: timeout = 0
if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0])[0]
if parser.opts['--create'] is not None: flags = ipc.CREAT
if parser.opts['--exclusive'] is not None: flags = ipc.CREAT | ipc.EXCL
if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8)
if parser.opts['--size'] is not None: size = int(parser.opts['--size'][0])
+ if parser.opts['--spool'] is not None: spool = int(parser.opts['--spool'][0])
if parser.opts['--type'] is not None: type = int(parser.opts['--type'][0])
if parser.opts['--priority'] is not None: type = int(parser.opts['--priority'][0])
if parser.opts['--timeout'] is not None: timeout = float(parser.opts['--timeout'][0])
- q = ipc.MessageQueue(key, flags, mode, size)
+ q = ipc.MessageQueue(key, flags, mode, spool, size)
if key is None:
print('key: %s' % ipc.keycat(q.key))
nocmd = False
@@ -336,17 +340,20 @@ try:
sys.exit(1)
elif (not use_posix) and (parser.opts['--rendezvous'] is not None):
- key, flags, mode, size, timeout = [None, None, None], 0, 0o600, 2048, None
+ key, flags, mode, spool, size, timeout = [None, None, None], 0, 0o600, 2, 8192, None
+ if use_posix:
+ spool, size = 1, 2048
if parser.opts['--nonblocking'] is not None: timeout = 0
if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0])
if parser.opts['--create'] is not None: flags = ipc.CREAT
if parser.opts['--exclusive'] is not None: flags = ipc.CREAT | ipc.EXCL
if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8)
+ if parser.opts['--spool'] is not None: spool = int(parser.opts['--spool'][0])
if parser.opts['--size'] is not None: size = int(parser.opts['--size'][0])
if parser.opts['--timeout'] is not None: timeout = float(parser.opts['--timeout'][0])
m = ipc.Semaphore(key[0], flags, mode, 1)
i = ipc.Semaphore(key[1], flags, mode, 0)
- q = ipc.MessageQueue(key[2], flags, mode, size)
+ q = ipc.MessageQueue(key[2], flags, mode, spool, size)
if key[0] is None:
print('key: %s' % ipc.keycat(m.key, i.key, q.key))
nocmd = False
diff --git a/src/unified_sysv_ipc.py b/src/unified_sysv_ipc.py
index f8738fa..538cb99 100644
--- a/src/unified_sysv_ipc.py
+++ b/src/unified_sysv_ipc.py
@@ -53,14 +53,14 @@ class SharedMemory(sysv_ipc.SharedMemory):
pass
class MessageQueue(sysv_ipc.MessageQueue):
- def __init__(self, *args, **kwargs):
- sysv_ipc.MessageQueue.__init__(self, *args, **kwargs)
+ def __init__(self, key, flags = 0, mode = 0o600, max_messages = 1, max_message_size = 2048):
+ sysv_ipc.MessageQueue.__init__(self, key, flags, mode, max_messages * max_message_size)
self.send_ = sysv_ipc.MessageQueue.send
self.recv_ = sysv_ipc.MessageQueue.receive
def send(self, message, timeout = None, type = 1):
self.send_(self, message, (timeout is None) or (timeout != 0), type)
def receive(self, timeout = None, type = 1):
- self.recv_(self, (timeout is None) or (timeout != 0), type)
+ return self.recv_(self, (timeout is None) or (timeout != 0), type)
def close(self):
pass