diff options
Diffstat (limited to 'libjava/java/io/FileDescriptor.java')
-rw-r--r-- | libjava/java/io/FileDescriptor.java | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/libjava/java/io/FileDescriptor.java b/libjava/java/io/FileDescriptor.java new file mode 100644 index 00000000000..0782b0c8e95 --- /dev/null +++ b/libjava/java/io/FileDescriptor.java @@ -0,0 +1,87 @@ +// FileDescriptor.java - Open file or device + +/* Copyright (C) 1998, 1999 Cygnus Solutions + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +package java.io; + +/** + * @author Tom Tromey <tromey@cygnus.com> + * @date September 24, 1998 + */ + +/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 + * "The Java Language Specification", ISBN 0-201-63451-1 + * Status: Complete to 1.1 + */ + +// For now we assume a POSIXy file system. This can be changed later +// if need be. +public final class FileDescriptor +{ + public static final FileDescriptor in = new FileDescriptor (0); + public static final FileDescriptor out = new FileDescriptor (1); + public static final FileDescriptor err = new FileDescriptor (2); + + public native void sync () throws SyncFailedException; + public native boolean valid (); + + + // These are mode values for open(). + static final int READ = 1; + static final int WRITE = 2; + static final int APPEND = 4; + + // These are WHENCE values for seek. + static final int SET = 0; + static final int CUR = 1; + + // Open a file. MODE is a combination of the above mode flags. + FileDescriptor (String path, int mode) throws IOException + { + fd = open (path, mode); + } + + public FileDescriptor () + { + fd = -1; + } + + native int open (String path, int mode) throws IOException; + native void write (int b) throws IOException; + native void write (byte[] b, int offset, int len) + throws IOException, NullPointerException, IndexOutOfBoundsException; + native void close () throws IOException; + native int seek (long pos, int whence) throws IOException; + native long length () throws IOException; + native long getFilePointer () throws IOException; + native int read () throws IOException; + native int read (byte[] bytes, int offset, int len) throws IOException; + native int available () throws IOException; + + + // When collected, close. + protected void finalize () throws IOException + { + if (valid ()) + close (); + } + + // Attach to an already-opened file. This is not private because we + // need access to it from other packages, for instance java.net. + // Ordinarily that wouldn't work, either, but in our case we know + // the access comes from C++, where "package private" is translated + // into "public". Eww. + FileDescriptor (int desc) + { + fd = desc; + } + + // System's notion of file descriptor. + private int fd; +} |