unshare: Add bindings for unshare(2)
parent
5970b83721
commit
07d2e75e67
|
@ -0,0 +1,35 @@
|
|||
import ctypes.util
|
||||
import os
|
||||
|
||||
|
||||
_libc = ctypes.CDLL(ctypes.util.find_library('c'))
|
||||
|
||||
_errno = _libc.__errno_location
|
||||
_errno.restype = ctypes.POINTER(ctypes.c_int)
|
||||
|
||||
_libc.unshare.argtypes = (ctypes.c_int,)
|
||||
_libc.unshare_restype = ctypes.c_int
|
||||
|
||||
|
||||
CLONE_FILES = 0x00000400
|
||||
CLONE_FS = 0x00000200
|
||||
CLONE_NEWIPC = 0x08000000
|
||||
CLONE_NEWNET = 0x40000000
|
||||
CLONE_NEWNS = 0x00020000
|
||||
CLONE_NEWPID = 0x20000000
|
||||
CLONE_NEWUSER = 0x10000000
|
||||
CLONE_NEWUTS = 0x04000000
|
||||
CLONE_SYSVSEM = 0x00040000
|
||||
|
||||
|
||||
class UnshareError(OSError):
|
||||
|
||||
@classmethod
|
||||
def from_c_err(cls):
|
||||
errno = _errno().contents.value
|
||||
return cls(errno, os.strerror(errno))
|
||||
|
||||
|
||||
def unshare(flags):
|
||||
if _libc.unshare(flags) != 0:
|
||||
raise UnshareError.from_c_err()
|
Loading…
Reference in New Issue