A small question about file descriptor


 
Thread Tools Search this Thread
Top Forums Programming A small question about file descriptor
# 1  
Old 08-10-2008
Question A small question about file descriptor

Can any body tell me when I put close(2), why the code does not show any out put?
Code:
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>

int main(){

    int fd1,fd2,fd3,fd4;
close(2);
    fd1=open("test1.txt",O_WRONLY |O_CREAT | O_TRUNC,0744);
    fprintf(stderr,"fd1 = %d\n",fd1);


    fd4=open("test2.txt",O_WRONLY |O_CREAT | O_TRUNC,0744);
    fprintf(stderr,"fd4 = %d\n",fd4);
    
}

# 2  
Old 08-10-2008
file descriptor 2 is stderr. You can do
Code:
printf ("%d\n", fileno (stderr));

to check

If you're closing stderr, and then fprintf'ing to stderr, you won't get any output.
# 3  
Old 08-10-2008
Question

Quote:
Originally Posted by redoubtable
file descriptor 2 is stderr. You can do
Code:
printf ("%d\n", fileno (stderr));

to check

If you're closing stderr, and then fprintf'ing to stderr, you won't get any output.

Wow.Learned something new thanks dude.I am learning fd.I have another little question:
The following code use dup() to duplicate fd but my fd1=3, when I did fd2=dup(fd1) then why fd2 is not 3. My output shows fd2=4:
Code:
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>

int main(){

    int fd1,fd2,fd3;
    fd1=open("test1.txt",O_WRONLY |O_CREAT | O_TRUNC,0744);
    fprintf(stderr,"fd1 = %d\n",fd1);
    
    
    fd2=dup(fd1);
    fprintf(stderr,"fd2 = %d\n",fd2);
    
    fd3=dup(fd2);
    fprintf(stderr,"fd3 = %d\n",fd3);

}

# 4  
Old 08-10-2008
dup() duplicates an existing file descriptor (in this case fd=3) and returns
the new descriptor to the calling process. It does not close the existing
fiel descriptor.

The new descriptor returned by the call to dup() is the lowest numbered
descriptor currently not in use by the process (in this case fd=4)
# 5  
Old 08-10-2008
Quote:
Originally Posted by fpmurphy
dup() duplicates an existing file descriptor (in this case fd=3) and returns
the new descriptor to the calling process. It does not close the existing
fiel descriptor.

The new descriptor returned by the call to dup() is the lowest numbered
descriptor currently not in use by the process (in this case fd=4)
Thanks for your answer.Smilie
# 6  
Old 08-10-2008
Quote:
Originally Posted by mlhazan
The following code use dup() to duplicate fd but my fd1=3, when I did fd2=dup(fd1) then why fd2 is not 3. My output shows fd2=4:
Two open fd's never share the same value. When you dup(), you just assure they'll read the same file. fd1 != fd2, but read(fd1, buf, sizeof (buf)) will return the same as read(fd2, buf, sizeof (buf)).
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Homework & Coursework Questions

Cat/File Descriptor Question

For the command below, I need to understand what exactly the command does and provide an examples for which the output will be saved to file save2... From my understanding, if the file provides an error in the first half of the pipe, it'll save to save1 and will never give an error to save to... (2 Replies)
Discussion started by: ayz649
2 Replies

2. Programming

Ok i have a small assembly question

I have this small program that runs with the flat assembler. My problem is that at the receive line function it receives the line and if there isn't a $ typed at the end of the user input the program displays a lot of strange stuff, sometimes beeps and then it seems to terminate without causing any... (13 Replies)
Discussion started by: Errigour
13 Replies

3. Shell Programming and Scripting

Small fast question

just to confirm du from sh show sizes as multiples of 512 byte right? (4 Replies)
Discussion started by: Nick1097
4 Replies

4. Programming

A small question about fork()

Hello experts, I am using fork() in my code but I am confused which output comes first child or parent? I did the following code .My book shows parent first but my linux shows child first.Can anyone tell me why? #include <stdio.h> int main(){ int pid; printf("I am original process with pid... (5 Replies)
Discussion started by: mlhazan
5 Replies

5. Shell Programming and Scripting

File Descriptor

Hello All, Im opening a file desciptor in perl and sending data using print CMD "$xyz". is there a limit to the length of the string that I can give to this CMD at a time. (3 Replies)
Discussion started by: rimser9
3 Replies

6. UNIX for Dummies Questions & Answers

Small question regarding SSH

I am looking for some model like this: My Computer ------------- Intermediate Server (IS) ------------- Own Server I must be able to ssh into the Intermediate Internet Server which is generally an online version of SSH service through which I will connect to Own Server. I was the IS to... (2 Replies)
Discussion started by: Legend986
2 Replies

7. Shell Programming and Scripting

A small minix question

First af all hi. i want to create a batch script which inform when users log in last time on system or if they are online when they logged in. I want ot use a file .users which has the usernames of users. i want to print for example peter is ONLINE: Logged in on Wed Feb 11 07:47 alex... (2 Replies)
Discussion started by: sasa
2 Replies

8. Shell Programming and Scripting

small question regarding substr()

Hello.. I am doing some awk-ing and among all I use substr inside it.. I have: ....substr($0,60,37) meaning as U all know take from 37 char. from point 60.. can I put it like this substr($0,60,end of line) meaning take it from point 60 and take all characketrs in that line until line... (2 Replies)
Discussion started by: amon
2 Replies

9. Shell Programming and Scripting

small question of echo | grep command

Hi, i've got the following: a=`echo $b | grep '^.*/'` i'm storing in the variable the value of the variable b only if it has a / somewhere. It works, but i don't want to print the value. How do i give the value of b to the grep command without the echo? thanks! (5 Replies)
Discussion started by: kfad
5 Replies

10. Shell Programming and Scripting

small question

Hi there, I found the following script on the net, i like to use it as a standard template for new scripts. But i do not understand the meaning of the last line, can anybody explain what going on on the last line vflag=off filename= while getopts vf: opt do case "$opt" in v)... (9 Replies)
Discussion started by: janr
9 Replies
Login or Register to Ask a Question