annotate Lib/posixfile.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 25301b9ea0cc
children 39b413ac2cc9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 # Start of posixfile.py
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 # Extended file operations
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 #
2597
cd5a96f6239b optional mode, bufsize for global function open()
Guido van Rossum <guido@python.org>
parents: 2566
diff changeset
8 # f = posixfile.open(filename, [mode, [bufsize]])
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
9 # will create a new posixfile object
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
10 #
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
11 # f = posixfile.fileopen(fileobject)
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
12 # will create a posixfile object from a builtin file object
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 # f.file()
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 # will return the original builtin file object
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 # f.dup()
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 # will return a new file object based on a new filedescriptor
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 # f.dup2(fd)
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 # will return a new file object based on the given filedescriptor
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 # f.flags(mode)
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 # will turn on the associated flag (merge)
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 # mode can contain the following characters:
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 # (character representing a flag)
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 # a append only flag
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 # c close on exec flag
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 # n no delay flag
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 # s synchronization flag
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 # (modifiers)
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 # ! turn flags 'off' instead of default 'on'
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 # = copy flags 'as is' instead of default 'merge'
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 # ? return a string in which the characters represent the flags
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 # that are set
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 # note: - the '!' and '=' modifiers are mutually exclusive.
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 # - the '?' modifier will return the status of the flags after they
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 # have been changed by other characters in the mode string
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 # f.lock(mode [, len [, start [, whence]]])
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 # will (un)lock a region
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 # mode can contain the following characters:
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 # (character representing type of lock)
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 # u unlock
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 # r read lock
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 # w write lock
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 # (modifiers)
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 # | wait until the lock can be granted
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 # ? return the first lock conflicting with the requested lock
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 # or 'None' if there is no conflict. The lock returned is in the
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 # format (mode, len, start, whence, pid) where mode is a
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 # character representing the type of lock ('r' or 'w')
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 # note: - the '?' modifier prevents a region from being locked; it is
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 # query only
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
60
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 class _posixfile_:
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
62 states = ['open', 'closed']
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
63
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 # Internal routines
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 def __repr__(self):
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
68 file = self._file_
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
69 return "<%s posixfile '%s', mode '%s' at %s>" % \
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
70 (self.states[file.closed], file.name, file.mode, \
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
71 hex(id(self))[2:])
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
72
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 def __del__(self):
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 self._file_.close()
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
75
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 # Initialization routines
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 #
2566
919c53a35efa default mode="r" and add optional bufsize
Guido van Rossum <guido@python.org>
parents: 1643
diff changeset
79 def open(self, name, mode='r', bufsize=-1):
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 import __builtin__
2566
919c53a35efa default mode="r" and add optional bufsize
Guido van Rossum <guido@python.org>
parents: 1643
diff changeset
81 return self.fileopen(__builtin__.open(name, mode, bufsize))
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
83 def fileopen(self, file):
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
84 if `type(file)` != "<type 'file'>":
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
85 raise TypeError, 'posixfile.fileopen() arg must be file object'
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
86 self._file_ = file
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 # Copy basic file methods
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
88 for method in file.__methods__:
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
89 setattr(self, method, getattr(file, method))
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 return self
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
91
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 # New methods
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 def file(self):
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 return self._file_
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 def dup(self):
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 import posix
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
100
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 try: ignore = posix.fdopen
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 except: raise AttributeError, 'dup() method unavailable'
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
103
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
104 return posix.fdopen(posix.dup(self._file_.fileno()), self._file_.mode)
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
105
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 def dup2(self, fd):
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 import posix
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
108
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 try: ignore = posix.fdopen
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 except: raise AttributeError, 'dup() method unavailable'
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
111
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 posix.dup2(self._file_.fileno(), fd)
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
113 return posix.fdopen(fd, self._file_.mode)
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
114
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
115 def flags(self, *which):
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
116 import fcntl, FCNTL
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
117
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
118 if which:
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
119 if len(which) > 1:
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
120 raise TypeError, 'Too many arguments'
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
121 which = which[0]
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
122 else: which = '?'
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
123
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 l_flags = 0
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 if 'n' in which: l_flags = l_flags | FCNTL.O_NDELAY
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 if 'a' in which: l_flags = l_flags | FCNTL.O_APPEND
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 if 's' in which: l_flags = l_flags | FCNTL.O_SYNC
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
128
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
129 file = self._file_
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
130
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 if '=' not in which:
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
132 cur_fl = fcntl.fcntl(file.fileno(), FCNTL.F_GETFL, 0)
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 if '!' in which: l_flags = cur_fl & ~ l_flags
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 else: l_flags = cur_fl | l_flags
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
135
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
136 l_flags = fcntl.fcntl(file.fileno(), FCNTL.F_SETFL, l_flags)
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
137
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
138 if 'c' in which:
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
139 arg = ('!' not in which) # 0 is don't, 1 is do close on exec
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
140 l_flags = fcntl.fcntl(file.fileno(), FCNTL.F_SETFD, arg)
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
141
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 if '?' in which:
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
143 which = '' # Return current flags
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
144 l_flags = fcntl.fcntl(file.fileno(), FCNTL.F_GETFL, 0)
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 if FCNTL.O_APPEND & l_flags: which = which + 'a'
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
146 if fcntl.fcntl(file.fileno(), FCNTL.F_GETFD, 0) & 1:
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 which = which + 'c'
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 if FCNTL.O_NDELAY & l_flags: which = which + 'n'
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 if FCNTL.O_SYNC & l_flags: which = which + 's'
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 return which
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
151
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 def lock(self, how, *args):
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 import struct, fcntl, FCNTL
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
154
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 if 'w' in how: l_type = FCNTL.F_WRLCK
2956
4d7fd9ff798d fix stupid typo: r->RDLK
Guido van Rossum <guido@python.org>
parents: 2597
diff changeset
156 elif 'r' in how: l_type = FCNTL.F_RDLCK
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 elif 'u' in how: l_type = FCNTL.F_UNLCK
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 else: raise TypeError, 'no type of lock specified'
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
159
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 if '|' in how: cmd = FCNTL.F_SETLKW
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 elif '?' in how: cmd = FCNTL.F_GETLK
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 else: cmd = FCNTL.F_SETLK
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
163
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 l_whence = 0
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 l_start = 0
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 l_len = 0
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
167
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 if len(args) == 1:
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 l_len = args[0]
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 elif len(args) == 2:
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 l_len, l_start = args
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 elif len(args) == 3:
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 l_len, l_start, l_whence = args
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 elif len(args) > 3:
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 raise TypeError, 'too many arguments'
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
176
4073
58504c9a37dc Added locking hacks for AIX
Guido van Rossum <guido@python.org>
parents: 3823
diff changeset
177 # Hack by davem@magnet.com to get locking to go on freebsd;
58504c9a37dc Added locking hacks for AIX
Guido van Rossum <guido@python.org>
parents: 3823
diff changeset
178 # additions for AIX by Vladimir.Marangozov@imag.fr
3823
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
179 import sys, os
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
180 if sys.platform == 'freebsd2':
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
181 flock = struct.pack('lxxxxlxxxxlhh', \
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
182 l_start, l_len, os.getpid(), l_type, l_whence)
4073
58504c9a37dc Added locking hacks for AIX
Guido van Rossum <guido@python.org>
parents: 3823
diff changeset
183 elif sys.platform in ['aix3', 'aix4']:
58504c9a37dc Added locking hacks for AIX
Guido van Rossum <guido@python.org>
parents: 3823
diff changeset
184 flock = struct.pack('hhlllii', \
58504c9a37dc Added locking hacks for AIX
Guido van Rossum <guido@python.org>
parents: 3823
diff changeset
185 l_type, l_whence, l_start, l_len, 0, 0, 0)
3823
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
186 else:
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
187 flock = struct.pack('hhllhh', \
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
188 l_type, l_whence, l_start, l_len, 0, 0)
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
189
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 flock = fcntl.fcntl(self._file_.fileno(), cmd, flock)
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
191
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 if '?' in how:
3823
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
193 if sys.platform == 'freebsd2':
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
194 l_start, l_len, l_pid, l_type, l_whence = \
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
195 struct.unpack('lxxxxlxxxxlhh', flock)
4073
58504c9a37dc Added locking hacks for AIX
Guido van Rossum <guido@python.org>
parents: 3823
diff changeset
196 elif sys.platform in ['aix3', 'aix4']:
58504c9a37dc Added locking hacks for AIX
Guido van Rossum <guido@python.org>
parents: 3823
diff changeset
197 l_type, l_whence, l_start, l_len, l_sysid, l_pid, l_vfs = \
58504c9a37dc Added locking hacks for AIX
Guido van Rossum <guido@python.org>
parents: 3823
diff changeset
198 struct.unpack('hhlllii', flock)
4264
25301b9ea0cc Added linux2 specific code :-(
Guido van Rossum <guido@python.org>
parents: 4073
diff changeset
199 elif sys.platform == "linux2":
25301b9ea0cc Added linux2 specific code :-(
Guido van Rossum <guido@python.org>
parents: 4073
diff changeset
200 l_type, l_whence, l_start, l_len, l_pid, l_sysid = \
25301b9ea0cc Added linux2 specific code :-(
Guido van Rossum <guido@python.org>
parents: 4073
diff changeset
201 struct.unpack('hhllhh', flock)
3823
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
202 else:
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
203 l_type, l_whence, l_start, l_len, l_sysid, l_pid = \
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
204 struct.unpack('hhllhh', flock)
9aac37892e88 Changes to make it work on FreeBSD 2.x.
Guido van Rossum <guido@python.org>
parents: 2956
diff changeset
205
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 if l_type != FCNTL.F_UNLCK:
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 if l_type == FCNTL.F_RDLCK:
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 return 'r', l_len, l_start, l_whence, l_pid
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 else:
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 return 'w', l_len, l_start, l_whence, l_pid
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
211
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 # Public routine to obtain a posixfile object
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 #
2597
cd5a96f6239b optional mode, bufsize for global function open()
Guido van Rossum <guido@python.org>
parents: 2566
diff changeset
215 def open(name, mode='r', bufsize=-1):
cd5a96f6239b optional mode, bufsize for global function open()
Guido van Rossum <guido@python.org>
parents: 2566
diff changeset
216 return _posixfile_().open(name, mode, bufsize)
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
217
1643
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
218 def fileopen(file):
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
219 return _posixfile_().fileopen(file)
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
220
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
221 #
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
222 # Constants
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
223 #
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
224 SEEK_SET = 0
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
225 SEEK_CUR = 1
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
226 SEEK_END = 2
7a47fabb187c Changes by Jaap -- added 'fileopen' method
Guido van Rossum <guido@python.org>
parents: 1642
diff changeset
227
1642
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 #
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 # End of posixfile.py
0d029dee9129 New module by Jaap V
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 #