04-29-2003
There is a system file table. It has one entry for every open file. Your process has descriptors that point to file table entries. Let's change the example to a text file.
So the shell syntax starts out " > results.txt". To run that the shell will need to do something like:
close(1);
fd=open("results.txt", O_WRONLY, 0);
We actually had to open a file. This filled in a file table entry. And now fd 0 points to that file table entry.
Now the syntax continues "2>&1" and to run that, the shell does something like:
close(2);
fd=dup(1);
Here we don't open a file. It's just that whatever file table entry fd 1 was pointing to has been copied into fd 2.
There is more to this than just saving an expensive open call. If we write to fd 1, what ever we write goes into the file. If we then write some more, the new data goes at the end of the file. We can write to fd 1 and we can write to fd 2 and they don't step on each other. That's because a write to either fd updates the file pointer in the file table entry.
In contrast, " > results.txt 2 > results.txt" gives us two file table entries and two file pointers.
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
Maybe it's an stupid question but remeber... I'm Junior..
I use command line to run programs, and some of them gives a lot of information when, for example, you open a window or other actions. That's really bad because my terminal gets full of unwanted messages, so I use "bin file & >/dev/null"... (1 Reply)
Discussion started by: piltrafa
1 Replies
2. Shell Programming and Scripting
hello all,
In many shell scripts i found '> /dev/null' , i am not able to get this,
will any one please explain why we are using this.
thanks
sudha (2 Replies)
Discussion started by: rrs
2 Replies
3. Solaris
Hi, Anyone can help
My solaris 8 system has the following
/dev/null , /dev/tty and /dev/console
All permission are lrwxrwxrwx
Can this be change to a non-world write ??
any impact ?? (12 Replies)
Discussion started by: civic2005
12 Replies
4. Shell Programming and Scripting
Hi,
I am new into UNIX shell scripting and I am wondering what is the meaning of the below text which appears at the end of each line in the ".sh" file:
> /dev/null 2>&1
For example, the line below:
sh $HOME/stats/Rep777/Act_777.sh omc omc > /dev/null 2>&1
I know for sure what "sh... (10 Replies)
Discussion started by: salanalani
10 Replies
5. Programming
Assume client send the message " Hello ", i get output such as
Sent mesg: hello
Bytes Sent to Client: 6
bytes_received = recv(clientSockD, data, MAX_DATA, 0);
if(bytes_received)
{
send(clientSockD, data, bytes_received, 0);
data = '\0';... (2 Replies)
Discussion started by: f.ben.isaac
2 Replies
6. Shell Programming and Scripting
Does >/dev/null 2>&1 and 2>&1 >/dev/null mean the same? (4 Replies)
Discussion started by: proactiveaditya
4 Replies
7. UNIX for Dummies Questions & Answers
How are these two different? They both prevent output and error from being displayed. I don't see the use of the "&"
echo "hello" > /dev/null 2>&1
echo "hello" > /dev/null 2>1 (3 Replies)
Discussion started by: glev2005
3 Replies
8. Shell Programming and Scripting
I apologize if this question has been answered else where or is too elementary.
I ran across a KSH script (long unimportant story) that does this:
if ; then
CAS_SRC_LOG="/var/log/cas_src.log 2>&1"
else
CAS_SRC_LOG="/dev/null 2>&1"
fithen does this:
/usr/bin/echo "heartbeat:... (5 Replies)
Discussion started by: jbmorrisonjr
5 Replies
9. AIX
Hello
Can I just remove/delete flile ?
rw-r--r-- 1 root system 2385088512 Jun 30 21:25 /dev/null 2>&1
size of this flile is 2274.75 m and fill up my filesystem:
Filesystem MB blocks Used Free %Used Mounted on
/dev/hd4 2560.00 2558.59 1.41 100% / (10 Replies)
Discussion started by: primo102
10 Replies
10. AIX
Hello,
Does anyone know how to housekeeping the null 2>&1 file in /dev?
its fill up my system, please help.
Thanks :b: (3 Replies)
Discussion started by: only
3 Replies
dup(2) System Calls Manual dup(2)
Name
dup, dup2 - duplicate an open file descriptor
Syntax
newd = dup(oldd)
int newd, oldd;
dup2(oldd, newd)
int oldd, newd;
Description
The system call duplicates an existing object descriptor. The argument oldd is a small non-negative integer index in the per-process
descriptor table. The value must be less than the size of the table, which is returned by The new descriptor, newd, returned by the call
is the lowest numbered descriptor that is not currently in use by the process.
The object referenced by the descriptor does not distinguish between references using oldd and newd in any way. Thus, if newd and oldd are
duplicate references to an open file, and calls all move a single pointer into the file. If a separate pointer into the file is desired, a
different object reference to the file must be obtained by issuing an additional call.
In the second form of the call, specify the value of newd needed. If this descriptor is already in use, the descriptor is first deallocated
as if a call had been done.
Return Values
The value -1 is returned if an error occurs in either call. The external variable errno indicates the cause of the error.
Diagnostics
The and system calls fail under the following conditions:
[EBADF] The oldd or newd is not a valid active descriptor.
[EMFILE] Too many descriptors are active.
[EINTR] The or function was terminated prematurely by a signal.
See Also
accept(2), close(2), getdtablesize(2), lseek(2), open(2), pipe(2), read(2), socket(2), socketpair(2), write(2)
dup(2)