01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17:
18: package java.io;
19:
20: /**
21: * FileDescriptor is the lowest level representation of a File, Device, or
22: * Socket. You can create any of the IO classes which take a FileDescriptor as
23: * an argument by querying an open Socket or File for the FileDescriptor.
24: * <p>
25: * The FileDescriptor class also contains static fields representing Standard
26: * Input, Output and Error. You can use these directly if desired but it is
27: * recommended you go through System.in, System.out, and System.err streams
28: * respectively.
29: * <p>
30: * Applications should not create new FileDescriptors.
31: *
32: * @see FileInputStream#getFD()
33: * @see FileOutputStream#getFD()
34: * @see RandomAccessFile#getFD()
35: */
36: public final class FileDescriptor {
37:
38: /** FileDescriptor representing Standard In */
39: public static final FileDescriptor in = new FileDescriptor();
40:
41: /** FileDescriptor representing Standard Out */
42: public static final FileDescriptor out = new FileDescriptor();
43:
44: /** FileDescriptor representing Standard Error */
45: public static final FileDescriptor err = new FileDescriptor();
46:
47: /**
48: * Represents a link to any underlying OS resources for this FileDescriptor.
49: * A value of -1 indicates that this FileDescriptor is invalid.
50: */
51: long descriptor = -1;
52:
53: boolean readOnly = false;
54:
55: private static native void oneTimeInitialization();
56:
57: static {
58: in.descriptor = 0;
59: out.descriptor = 1;
60: err.descriptor = 2;
61:
62: oneTimeInitialization();
63: }
64:
65: /**
66: * Constructs a new FileDescriptor containing an invalid handle. This
67: * constructor does nothing interesting. Provided for signature
68: * compatibility.
69: */
70: public FileDescriptor() {
71: super ();
72: }
73:
74: /**
75: * Ensures that data which is buffered within the underlying implementation
76: * is written out to the appropriate device before returning.
77: *
78: * @throws SyncFailedException
79: * when the operation fails
80: */
81: public void sync() throws SyncFailedException {
82: // if the descriptor is a read-only one, do nothing
83: if (!readOnly) {
84: syncImpl();
85: }
86: }
87:
88: private native void syncImpl() throws SyncFailedException;
89:
90: /**
91: * Answers a boolean indicating whether or not this FileDescriptor is valid.
92: *
93: * @return <code>true</code> if this FileDescriptor is valid,
94: * <code>false</code> otherwise
95: */
96: public boolean valid() {
97: return descriptor != -1;
98: }
99: }
|