redirecting with file descriptor


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting redirecting with file descriptor
# 1  
Old 10-15-2012
redirecting with file descriptor

hello,
Someone can help me with redirectors?
I am writing this script in bash enviroment on Fedora:

Code:
exec 4<> /dev/tcp/10.10.11.30/5000    #open socket in input/output
strings<&4 >file.txt &

I send file descriptor 4 to string command to purge data stream from special char while come from connection but if i try to redirect the output to >file.txt I get no data.

Without >file.txt stream is correctly processed and sent to video (stdout)
I have also tryed with tee command without success... where I am getting wrong?

Tnx in advantage


Moderator's Comments:
Mod Comment Please use code tags next time for your code and data.

Last edited by zaxxon; 10-15-2012 at 03:56 PM.. Reason: code tags
# 2  
Old 10-17-2012
I do not have a fedora, but does it work without the exec, just redirect the /dev/tcp/10.10.11.30/5000 as stdin to strings? I use "cat -vt" more often than 'strings' (more oriented to compiled objects), so I can see all the control characters, but printable. Timing can be touchy with a lot of tcp protocols. Since the shell opens the file.txt and strings just inherits fd 1, it may be reacting to that fd not being a terminal, but I never though of strings as having any terminal orientation, like a curses program - vim or cscope.

Using strace can tell you a lot about what is happening. You can strace a bash -c that does it all. Turn on all the options and point it at a file! It's an education!

Last edited by DGPickett; 10-17-2012 at 06:15 PM..
# 3  
Old 10-17-2012
Tnx DG, I will try, and answer you back if your way, can be an alternative solution to apply, anyway googling around, and, maybe, also well written on manual of stdout, it say that STDOUT is a buffered stream, so, it should write to file just each Carriage return, or in my case, when I kill STRING process...
# 4  
Old 10-18-2012
Well, stdout in C is a FILE* and by default buffered. A FILE* is a fd plus a buffer and controls to say how full it is, inside a process. The > refers to fd 1, which is standard output. fd's are not buffered in any app-visible way, but databases and other paranoid things do fsync(), which is like an open-close, and flushes data some distance closer to the disk or network. Close will wait for the data to be written. Exit of a process will flush all FILE*. So, inside bash ">file.txt" is open( "file.txt", O_CREAT | O_APPEND) and then after forking the new process, close(1) the inherited standard out and dup2( new_fd, 1 ) so the new fd is now standard out, with an fd that survives exec(), then exec( new_cmd ). You can watch this on strace. The new_cmd can examine fd 1 with a variety of commands to see if it is a terminal and such, will automatically buffer it with a FILE* called stdout. The app can use stdout or ignore it and use fd 1 on a rawer level of i/o. Because of the buffer, if you switch, you fflush( stdout ) first. Strace cannot see FILE* actions on most machines and then only if you trace library calls, but it sees all fd activity.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help with File Descriptor in a While loop

Hi, I am trying to read a file line-by-line in a while loop, and perform some tasks which involves non-interactive SSH to a remote server. The code looks something like this -- #!/usr/bin/ksh export myFile=/path/to/my/file.load while read line do do something ## Adding the SSH... (2 Replies)
Discussion started by: Subu1987
2 Replies

2. Shell Programming and Scripting

file descriptor count

I am trying to write a script which will only show me the file descriptor count for a process/pid. My script will return me the count only not the whole output. For example, I would like my script to return the output 23 this case, not the whole output. Can anybody please help me how do I get... (11 Replies)
Discussion started by: mohullah
11 Replies

3. Shell Programming and Scripting

file descriptor KSH

Hello, How can i use file descriptor in a script to read 2 files at the same time and extract line 200 from file 1 and line 500 from file 2. Thanks. (6 Replies)
Discussion started by: LiorAmitai
6 Replies

4. UNIX for Dummies Questions & Answers

File Descriptor

Hi What the below path contains? /proc/<pid>/fd (1 Reply)
Discussion started by: siba.s.nayak
1 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. Shell Programming and Scripting

Passing a file descriptor

I am trying to right a function which uses a file descriptor to write to a log file. The problem is that the on the print statement the file descriptor is called bad. Now when I first open the file and print to it in the f_open function by passing the descriptor to f_print_log all works well,... (6 Replies)
Discussion started by: robotball
6 Replies

7. Programming

Problems with file descriptor

Hi, look at the following code: The client after estabilishing a connection with the server does the following: if ((peter = fopen(argv, "r")) == NULL){ printf("errore\n"); exit(0); } ... (11 Replies)
Discussion started by: teo
11 Replies

8. UNIX for Dummies Questions & Answers

File Descriptor Help

What is a file descriptor in Unix?? How to find a file descriptor of a file in Unix?? Does it have anything to do with the Inode numbers?? (3 Replies)
Discussion started by: rahulrathod
3 Replies

9. UNIX for Dummies Questions & Answers

file activity (open/closed) file descriptor info using KORN shell scripting

I am trying to find a way to check the current status of a file. Such as some cron job processes are dependent on the completion of others. if a file is currently being accessed / modified or simply open state I will wait until it is done being processed before attempting the next process on that... (3 Replies)
Discussion started by: Gary Dunn
3 Replies

10. UNIX for Dummies Questions & Answers

bad file descriptor?

Ok, I'm sure this is a total newbie question, but I think I'm in the right place, no? I'm trying to call a perl module from a cgi script - Mail::Sendmail - and my web host installed the module in a directory that doesn't seem to be accessible, at least not the way I'm trying. But I thought you... (1 Reply)
Discussion started by: ftb
1 Replies
Login or Register to Ask a Question