Opens the file whose filename is given by FILENAME, and associates it with FILEHANDLE.
If FILEHANDLE is an expression, its value is used as the name of the real filehandle
wanted. This function calls the underlying operating system's open function
with the parameters FILENAME, MODE, PERMS.
The possible values and flag bits of the MODE parameter are system-dependent; they are
available via the standard module Fcntl. See the documentation of your
operating system's open to see which values and flag bits are available. You
may combine several flags using the |-operator.
Some of the most common values are O_RDONLY for opening the file in
read-only mode, O_WRONLY for opening the file in write-only mode, and O_RDWR
for opening the file in read-write mode, and.
For historical reasons, some values work on almost every system supported by perl: zero
means read-only, one means write-only, and two means read/write. We know that these values
do not work under OS/390 & VM/ESA Unix and on the Macintosh; you probably don't
want to use them in new code.
If the file named by FILENAME does not exist and the open call creates it
(typically because MODE includes the O_CREAT flag), then the value of PERMS
specifies the permissions of the newly created file. If you omit the PERMS argument to sysopen,
Perl uses the octal value 0666. These permission values need to be in octal,
and are modified by your process's current umask.
In many systems the O_EXCL flag is available for opening files in
exclusive mode. This is not locking: exclusiveness means here that if the file
already exists, sysopen() fails. The O_EXCL wins O_TRUNC.
Sometimes you may want to truncate an already-existing file: O_TRUNC.
You should seldom if ever use 0644 as argument to sysopen,
because that takes away the user's option to have a more permissive umask. Better to omit
it. See the perlfunc(1) entry on umask for more on this.
Note that sysopen depends on the fdopen() C library function. On many UNIX
systems, fdopen() is known to fail when file descriptors exceed a certain value, typically
255. If you need more file descriptors than that, consider rebuilding Perl to use the sfio
library, or perhaps using the POSIX::open() function.
See perlopentut for
a kinder, gentler explanation of opening files.