Re: can Java program abolish file descriptor 1 so no any programs
can print to the monitor?
On 3/21/2014 4:13 PM, www wrote:
a program currently running is printing something to the terminal. I am wondering if I can use some Java to intercept those printed message so that those message do not show up on the terminal.
That program is not started by the Java program. I am working on Linux.
My understanding of file system is that there is a filedescriptor 0 -- the keyboard input are saved in that file and other programs take it from there; there is another filesdescriptor 1 -- the messages printed by computer programs are put into that file first, then its content is dumped to the monitor. So I think if I can let Java code erase my computer filedescriptor 1, then nothing will be printed to the monitor. file descriptor 2 is another file and is for the stderr.
Every Unix process has its own set of file descriptors.[*]
There is no system-wide "file descriptor 1" that program A could
somehow erase or make unavailable to program B. (If there were
such a system-wide thing and A deleted it, it would also become
unavailable to programs C,D,E,...,Z,AA,AB,...)
Also, your notions about buffering input and output in files
while it's in transit between programs and devices are a little
wide of the mark. A "file descriptor" need not refer to a disk
file; it can refer to anything that satisfies Unix' abstract
notion of "file:" disk file, tty, socket, pipe, ... There is
no on-disk file whose deletion would cause the program's output
to go somewhere else than it's already going. (Well, I suppose
you could suppress the program's output by deleting so many
crucial system files that the whole O/S came crashing down in
flaming ruins -- but you might not want to do that...)
[*] Sometimes two or more processes can share a single file
descriptor. This happens most often when a parent process uses
a process-creating system call like fork(), and the child process
inherits all the parent's open descriptors. There are also some
fairly "advanced" techniques that allow one process to create a
file descriptor and share it with another already-running process.
But in the ordinary scheme of things, two "unrelated" processes --
like your printing program and your Java program -- have no file
descriptors in common.
I think this is an interesting exercise for me.
I think two things: First, that you should learn about the
"/dev/null" pseudo-device and how to do I/O redirection, and
second, that your question will get better answers in
comp.unix.programmer than here.