diff options
| author | Mattias Andrée <maandree@operamail.com> | 2014-06-14 19:43:37 +0200 |
|---|---|---|
| committer | Mattias Andrée <maandree@operamail.com> | 2014-06-14 19:43:37 +0200 |
| commit | 078303e4e488c1fdb431815f2fff85b7f0597397 (patch) | |
| tree | 4712bcd34e9921e601ae69e7102082ef8cdfe3a1 /src | |
| parent | fix small errors (diff) | |
| download | cmdipc-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>
Diffstat (limited to 'src')
| -rwxr-xr-x | src/cmdipc | 15 | ||||
| -rw-r--r-- | src/unified_sysv_ipc.py | 6 |
2 files changed, 14 insertions, 7 deletions
@@ -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 |
