14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""Extended file operations available in POSIX. 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmf = posixfile.open(filename, [mode, [bufsize]]) 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm will create a new posixfile object 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmf = posixfile.fileopen(fileobject) 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm will create a posixfile object from a builtin file object 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmf.file() 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm will return the original builtin file object 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmf.dup() 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm will return a new file object based on a new filedescriptor 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmf.dup2(fd) 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm will return a new file object based on the given filedescriptor 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmf.flags(mode) 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm will turn on the associated flag (merge) 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mode can contain the following characters: 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (character representing a flag) 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a append only flag 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c close on exec flag 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm n no delay flag 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s synchronization flag 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (modifiers) 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ! turn flags 'off' instead of default 'on' 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm = copy flags 'as is' instead of default 'merge' 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ? return a string in which the characters represent the flags 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm that are set 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm note: - the '!' and '=' modifiers are mutually exclusive. 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm - the '?' modifier will return the status of the flags after they 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm have been changed by other characters in the mode string 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmf.lock(mode [, len [, start [, whence]]]) 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm will (un)lock a region 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mode can contain the following characters: 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (character representing type of lock) 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm u unlock 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm r read lock 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm w write lock 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (modifiers) 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm | wait until the lock can be granted 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ? return the first lock conflicting with the requested lock 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm or 'None' if there is no conflict. The lock returned is in the 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm format (mode, len, start, whence, pid) where mode is a 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm character representing the type of lock ('r' or 'w') 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm note: - the '?' modifier prevents a region from being locked; it is 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm query only 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm""" 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport warnings 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmwarnings.warn("The posixfile module is deprecated; " 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "fcntl.lockf() provides better locking", DeprecationWarning, 2) 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass _posixfile_: 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """File wrapper class that provides extra POSIX file routines.""" 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm states = ['open', 'closed'] 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Internal routines 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __repr__(self): 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file = self._file_ 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return "<%s posixfile '%s', mode '%s' at %s>" % \ 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (self.states[file.closed], file.name, file.mode, \ 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm hex(id(self))[2:]) 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Initialization routines 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def open(self, name, mode='r', bufsize=-1): 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import __builtin__ 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.fileopen(__builtin__.open(name, mode, bufsize)) 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def fileopen(self, file): 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import types 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if repr(type(file)) != "<type 'file'>": 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError, 'posixfile.fileopen() arg must be file object' 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._file_ = file 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Copy basic file methods 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for maybemethod in dir(file): 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not maybemethod.startswith('_'): 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm attr = getattr(file, maybemethod) 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if isinstance(attr, types.BuiltinMethodType): 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(self, maybemethod, attr) 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # New methods 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def file(self): 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self._file_ 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def dup(self): 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import posix 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not hasattr(posix, 'fdopen'): 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise AttributeError, 'dup() method unavailable' 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return posix.fdopen(posix.dup(self._file_.fileno()), self._file_.mode) 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def dup2(self, fd): 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import posix 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not hasattr(posix, 'fdopen'): 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise AttributeError, 'dup() method unavailable' 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm posix.dup2(self._file_.fileno(), fd) 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return posix.fdopen(fd, self._file_.mode) 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def flags(self, *which): 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import fcntl, os 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if which: 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if len(which) > 1: 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError, 'Too many arguments' 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm which = which[0] 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: which = '?' 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_flags = 0 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 'n' in which: l_flags = l_flags | os.O_NDELAY 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 'a' in which: l_flags = l_flags | os.O_APPEND 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 's' in which: l_flags = l_flags | os.O_SYNC 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm file = self._file_ 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if '=' not in which: 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cur_fl = fcntl.fcntl(file.fileno(), fcntl.F_GETFL, 0) 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if '!' in which: l_flags = cur_fl & ~ l_flags 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: l_flags = cur_fl | l_flags 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_flags = fcntl.fcntl(file.fileno(), fcntl.F_SETFL, l_flags) 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 'c' in which: 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm arg = ('!' not in which) # 0 is don't, 1 is do close on exec 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_flags = fcntl.fcntl(file.fileno(), fcntl.F_SETFD, arg) 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if '?' in which: 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm which = '' # Return current flags 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_flags = fcntl.fcntl(file.fileno(), fcntl.F_GETFL, 0) 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if os.O_APPEND & l_flags: which = which + 'a' 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if fcntl.fcntl(file.fileno(), fcntl.F_GETFD, 0) & 1: 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm which = which + 'c' 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if os.O_NDELAY & l_flags: which = which + 'n' 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if os.O_SYNC & l_flags: which = which + 's' 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return which 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def lock(self, how, *args): 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import struct, fcntl 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if 'w' in how: l_type = fcntl.F_WRLCK 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif 'r' in how: l_type = fcntl.F_RDLCK 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif 'u' in how: l_type = fcntl.F_UNLCK 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: raise TypeError, 'no type of lock specified' 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if '|' in how: cmd = fcntl.F_SETLKW 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif '?' in how: cmd = fcntl.F_GETLK 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: cmd = fcntl.F_SETLK 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_whence = 0 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_start = 0 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_len = 0 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if len(args) == 1: 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_len = args[0] 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif len(args) == 2: 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_len, l_start = args 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif len(args) == 3: 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_len, l_start, l_whence = args 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif len(args) > 3: 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError, 'too many arguments' 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Hack by davem@magnet.com to get locking to go on freebsd; 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # additions for AIX by Vladimir.Marangozov@imag.fr 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm import sys, os 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if sys.platform in ('netbsd1', 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'openbsd2', 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'freebsd6', 'freebsd7', 'freebsd8', 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'bsdos2', 'bsdos3', 'bsdos4'): 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm flock = struct.pack('lxxxxlxxxxlhh', \ 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_start, l_len, os.getpid(), l_type, l_whence) 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif sys.platform in ('aix3', 'aix4'): 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm flock = struct.pack('hhlllii', \ 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_type, l_whence, l_start, l_len, 0, 0, 0) 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm flock = struct.pack('hhllhh', \ 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_type, l_whence, l_start, l_len, 0, 0) 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm flock = fcntl.fcntl(self._file_.fileno(), cmd, flock) 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if '?' in how: 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if sys.platform in ('netbsd1', 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'openbsd2', 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'bsdos2', 'bsdos3', 'bsdos4'): 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_start, l_len, l_pid, l_type, l_whence = \ 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm struct.unpack('lxxxxlxxxxlhh', flock) 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif sys.platform in ('aix3', 'aix4'): 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_type, l_whence, l_start, l_len, l_sysid, l_pid, l_vfs = \ 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm struct.unpack('hhlllii', flock) 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm elif sys.platform == "linux2": 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_type, l_whence, l_start, l_len, l_pid, l_sysid = \ 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm struct.unpack('hhllhh', flock) 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm l_type, l_whence, l_start, l_len, l_sysid, l_pid = \ 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm struct.unpack('hhllhh', flock) 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if l_type != fcntl.F_UNLCK: 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if l_type == fcntl.F_RDLCK: 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 'r', l_len, l_start, l_whence, l_pid 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm else: 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 'w', l_len, l_start, l_whence, l_pid 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef open(name, mode='r', bufsize=-1): 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Public routine to open a file as a posixfile object.""" 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _posixfile_().open(name, mode, bufsize) 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef fileopen(file): 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Public routine to get a posixfile object from a Python file object.""" 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return _posixfile_().fileopen(file) 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Constants 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmSEEK_SET = 0 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmSEEK_CUR = 1 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmSEEK_END = 2 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# End of posixfile.py 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# 238