VMS Python compatibility issues: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
mNo edit summary |
||
| (6 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
= File system = | |||
#Directories and files with the same name are allowed | |||
#Files have versioning, therefore two files with the same name might have different content | |||
#Shared stream I/O does not work | |||
#To guarantee the file content is on the disk the <code>fsync()</code> function must be used | |||
#Because files can be referenced using logical names the real file path may be different from the “path” used to open a file | |||
#Files has no access time attribute | |||
#Changing a files permissions also changes its modification time | |||
#Changing the content of a directory does not change the directory modification time. | |||
#Files have four rights bits (read, write, execute, and delete); Linux (UNIX) has only three (read, write, and execute) | |||
#The ‘.DIR’ extension is reserved | |||
#Non-blocking file IO is not supported by the OpenVMS CRTL | |||
#There are various known issues with symbolic link implementation | |||
#The symbol '$' is commonly used in file and directory names | |||
#On OpenVMS chmod(0) sets the user's default permissions as opposed to resetting permissions | |||
#To delete a directory the user has to have ‘delete’ permission for the directory | |||
#On OpenVMS <code>mkdir()</code> creates all intermediate directories (if required) | |||
= Process = | |||
#There are no Linux-like <code>fork()</code> and <code>spawn()</code> functions | |||
#Pipes are created via mailbox and are not totally compatible with UNIX pipes (compatibility issues) | |||
#If a child process has threads, each thread posts 'END-OF-PIPE' when the child completes/terminates | |||
#The functions <code>select()</code> and <code>poll()</code> work only with sockets | |||
#The function <code>siginterrupt()</code> is not supported | |||
# | #Numerous compatibility issues with signals | ||
#Interrupting I/O operations may cause the process to hang | |||
#There is no root user with zero UID | |||
# | #Processes do not handle recursion overflow cleanly | ||
= Sockets = | |||
#<code>AF_UNIX</code> has somewhat different meaning | |||
#Binding a socket to an empty address fails (wildcard resolved to multiple address) | |||
#<code>getpeername()</code> returns ‘0.0.0.0’ instead of an error | |||
#<code>socket.socket.sendall</code> does not work correctly (process may crash) | |||
# | = Time = | ||
#<code>time_t</code> is unsigned | |||
#<code>strftime()</code> | |||
#*Does not support <code>%G</code> format | |||
#*Exhibits undefined behavior when format ends with <code>%</code> | |||
#*<code>%4Y</code> is padded with spaces | |||
= Miscellaneous = | |||
#There is no appropriate way to programmatically get all environment variables (logical names and/or symbols) | |||
# | #The current OpenVMS port of sqlite3 does not support "OR ROLLBACK" | ||
# | #<code>locale.strxfrm()</code> does not work as expected | ||
= Compiler = | |||
#<code>uint_ptr</code> is always 64-bit, <code>void*</code> is either 32-bit or 64-bit (depending on selected pointer size) | |||
#Compiler does not support relative include paths | |||
---- | ---- | ||
[[Category:VMS | [[Category:VMS Python]] | ||
Latest revision as of 07:50, 1 July 2021
File system
- Directories and files with the same name are allowed
- Files have versioning, therefore two files with the same name might have different content
- Shared stream I/O does not work
- To guarantee the file content is on the disk the
fsync()function must be used - Because files can be referenced using logical names the real file path may be different from the “path” used to open a file
- Files has no access time attribute
- Changing a files permissions also changes its modification time
- Changing the content of a directory does not change the directory modification time.
- Files have four rights bits (read, write, execute, and delete); Linux (UNIX) has only three (read, write, and execute)
- The ‘.DIR’ extension is reserved
- Non-blocking file IO is not supported by the OpenVMS CRTL
- There are various known issues with symbolic link implementation
- The symbol '$' is commonly used in file and directory names
- On OpenVMS chmod(0) sets the user's default permissions as opposed to resetting permissions
- To delete a directory the user has to have ‘delete’ permission for the directory
- On OpenVMS
mkdir()creates all intermediate directories (if required)
Process
- There are no Linux-like
fork()andspawn()functions - Pipes are created via mailbox and are not totally compatible with UNIX pipes (compatibility issues)
- If a child process has threads, each thread posts 'END-OF-PIPE' when the child completes/terminates
- The functions
select()andpoll()work only with sockets - The function
siginterrupt()is not supported - Numerous compatibility issues with signals
- Interrupting I/O operations may cause the process to hang
- There is no root user with zero UID
- Processes do not handle recursion overflow cleanly
Sockets
AF_UNIXhas somewhat different meaning- Binding a socket to an empty address fails (wildcard resolved to multiple address)
getpeername()returns ‘0.0.0.0’ instead of an errorsocket.socket.sendalldoes not work correctly (process may crash)
Time
time_tis unsignedstrftime()- Does not support
%Gformat - Exhibits undefined behavior when format ends with
% %4Yis padded with spaces
- Does not support
Miscellaneous
- There is no appropriate way to programmatically get all environment variables (logical names and/or symbols)
- The current OpenVMS port of sqlite3 does not support "OR ROLLBACK"
locale.strxfrm()does not work as expected
Compiler
uint_ptris always 64-bit,void*is either 32-bit or 64-bit (depending on selected pointer size)- Compiler does not support relative include paths