Issue 12103: Document how to use open with os.O_CLOEXEC (original) (raw)
Issue12103
Created on 2011-05-18 11:01 by socketpair, last changed 2022-04-11 14:57 by admin. This issue is now closed.
Messages (5) | ||
---|---|---|
msg136223 - (view) | Author: Марк Коренберг (socketpair) * | Date: 2011-05-18 11:01 |
open() and friends (like temporaryfile) does not document 'e' letter in second arguement. At least on Linux, it opens file with O_CLOEXEC. Not sure under Windows. Also, there are other interesting letters (man -a fopen), like: c (since glibc 2.3.3) Do not make the open operation, or subsequent read and write operations, thread cancellation points. e (since glibc 2.7) Open the file with the O_CLOEXEC flag. See open(2) for more information. m (since glibc 2.3) Attempt to access the file using mmap(2), rather than I/O system calls (read(2), write(2)). Currently, use of mmap(2) is only attempted for a file opened for reading. x Open the file exclusively (like the O_EXCL flag of open(2)). If the file already exists, fopen() fails, and sets errno to EEXIST. This flag is ignored for fdopen(). | ||
msg136225 - (view) | Author: STINNER Victor (vstinner) * ![]() |
Date: 2011-05-18 11:16 |
c, e, m and x flags are specific to the GNU libc. Python 2 does basically pass the mode to fopen() unmodified (there is one exception, the U flag). fopen() of Visual C++ 2005 has other flags: c Enable the commit flag for the associated filename so that the contents of the file buffer are written directly to disk if either fflush or _flushall is called. n Reset the commit flag for the associated filename to "no-commit." This is the default. It also overrides the global commit flag if you link your program with COMMODE.OBJ. The global commit flag default is "no-commit" unless you explicitly link your program with COMMODE.OBJ (see Link Options). N Specifies that the file is not inherited by child processes. S Specifies that caching is optimized for, but not restricted to, sequential access from disk. R Specifies that caching is optimized for, but not restricted to, random access from disk. T Specifies a file as temporary. If possible, it is not flushed to disk. D Specifies a file as temporary. It is deleted when the last file pointer is closed. ccs=ENCODING Specifies the coded character set to use (UTF-8, UTF-16LE, or UNICODE) for this file. Leave unspecified if you want ANSI encoding. This option is available in Visual C++ 2005 and later. http://msdn.microsoft.com/en-us/library/yeby3zcb(v=vs.80).aspx I don't think that non standard modes should be documented in Python doc, but we may add links to specific documentations like the GNU libc and Microsoft fopen(). -- This issue is specific to Python 2, Python 3 doesn't use fopen() anymore. | ||
msg136526 - (view) | Author: STINNER Victor (vstinner) * ![]() |
Date: 2011-05-22 13:58 |
Issue #12105 adds os.O_CLOEXEC flag, so we will be able to write open(os.open(filename, os.O_RDONLY|os.O_CLOEXEC)). Do you want to work on a doc patch? | ||
msg178954 - (view) | Author: STINNER Victor (vstinner) * ![]() |
Date: 2013-01-03 15:33 |
> x Open the file exclusively (like the O_EXCL flag of open(2)). > If the file already exists, fopen() fails, and sets errno to EEXIST. > This flag is ignored for fdopen(). Python 3.3 adds support for this mode: see issue #12760. > e (since glibc 2.7) > Open the file with the O_CLOEXEC flag. See open(2) for more information. I created the issue #16850 for this mode. -- Other modes seem to be very specific to some platforms. I don't think that it would be possible to expose them in a portable way using the open() function directly. Can we close this issue? I prefer to work on #16850 for the close-on-exec mode. | ||
msg178961 - (view) | Author: Christian Heimes (christian.heimes) * ![]() |
Date: 2013-01-03 16:31 |
Sounds good to me. |
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-04-11 14:57:17 | admin | set | github: 56312 |
2013-01-03 16:31:47 | christian.heimes | set | status: open -> closednosy: + christian.heimesmessages: + resolution: out of date |
2013-01-03 15:33:43 | vstinner | set | messages: + |
2011-11-12 13:45:07 | eric.araujo | set | keywords: + easynosy: + eric.araujotitle: Documentation of open() does not claim 'e' support in mode string -> Document how to use open with os.O_CLOEXECversions: + Python 3.3, - Python 2.7 |
2011-05-22 13:58:59 | vstinner | set | messages: + |
2011-05-18 11:16:07 | vstinner | set | nosy: + vstinnermessages: + versions: + Python 2.7 |
2011-05-18 11:01:37 | socketpair | set | type: behavior |
2011-05-18 11:01:24 | socketpair | create |