aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-06-13 20:18:12 +0200
committerMattias Andrée <maandree@operamail.com>2014-06-13 20:18:12 +0200
commit27fbbc964349ff9c08f425cd847828a53804a594 (patch)
tree8ed940b14407a4bafe338505fef39bae2d18672a
parentadd semaphore (diff)
downloadcmdipc-27fbbc964349ff9c08f425cd847828a53804a594.tar.gz
cmdipc-27fbbc964349ff9c08f425cd847828a53804a594.tar.bz2
cmdipc-27fbbc964349ff9c08f425cd847828a53804a594.tar.xz
add mutex
Signed-off-by: Mattias Andrée <maandree@operamail.com>
-rwxr-xr-xsrc/cmdipc39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/cmdipc b/src/cmdipc
index 9ea9c71..805123c 100755
--- a/src/cmdipc
+++ b/src/cmdipc
@@ -26,10 +26,18 @@ import posix_ipc
parser = ArgParser('System V and POSIX IPC from the command line',
- '\n'.join(['%s -Q [options]' % sys.argv[0],
- '%s -Q [options] send [--] message' % sys.argv[0],
- '%s -Q [options] receive' % sys.argv[0],
- '%s -S [options] [p|v|z]' % sys.argv[0]]),
+ '\n'.join(['%s -Q [<options>]' % sys.argv[0],
+ '%s -Q [<options>] send [--] <message>' % sys.argv[0],
+ '%s -Q [<options>] receive' % sys.argv[0],
+ '%s -S [<options>] [p|v|z]' % sys.argv[0],
+ '%s -X [<options>]' % sys.argv[0],
+ '%s -X [<options>] enter' % sys.argv[0],
+ '%s -X [<options>] leave' % sys.argv[0],
+ '%s -C [<options>]' % sys.argv[0],
+ '%s -C [<options>] enter' % sys.argv[0],
+ '%s -C [<options>] leave' % sys.argv[0],
+ '%s -C [<options>] wait' % sys.argv[0],
+ '%s -C [<options>] notify [all]' % sys.argv[0]]),
None, None, True, ArgParser.standard_abbreviations())
@@ -48,6 +56,8 @@ parser.add_argumentless(['-c', '--create'], 0, 'Create item')
parser.add_argumentless(['-x', '--exclusive'], 0, 'Create exclusive item')
parser.add_argumentless(['-Q', '--mqueue'], 0, 'Use message queue')
parser.add_argumentless(['-S', '--semaphore'], 0, 'Use semaphore')
+parser.add_argumentless(['-X', '--mutex'], 0, 'Use mutex (using semaphore)')
+#parser.add_argumentless(['-C', '--condition'], 0, 'Use condition (non-primitive)')
#parser.add_argumentless(['-M', '--shm'], 0, 'Use shared memory')
@@ -118,6 +128,27 @@ try:
print('Invalid command given', file = sys.stderr)
sys.exit(1)
+ elif parser.opts['--mutex'] is not None:
+ key, flags, mode, timeout = None, 0, 0o600, None
+ if parser.opts['--key'] is not None: key = int(parser.opts['--key'][0])
+ if parser.opts['--create'] is not None: flags = sysv_ipc.IPC_CREAT
+ if parser.opts['--exclusive'] is not None: flags = sysv_ipc.IPC_CREAT | sysv_ipc.IPC_EXCL
+ if parser.opts['--mode'] is not None: mode = int(parser.opts['--mode'][0], 8)
+ if parser.opts['--timeout'] is not None: timeout = float(parser.opts['--timeout'][0])
+ s = sysv_ipc.Semaphore(key, flags, mode, 1)
+ if key is None:
+ print('key: %i' % s.key)
+ nocmd = False
+ if (len(parser.files) == 1) and (parser.files[0] == 'enter'): s.P(timeout)
+ elif (len(parser.files) == 1) and (parser.files[0] == 'leave'): s.V()
+ elif key is not None:
+ nocmd = True
+ if parser.opts['--remove'] is not None:
+ s.remove()
+ elif nocmd:
+ print('Invalid command given', file = sys.stderr)
+ sys.exit(1)
+
else:
print('No command given', file = sys.stderr)
sys.exit(1)