ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
Hi everybody,
I wrote a small "cat"-like program for linux using Linux system calls for reading files and outputting to STDOUT. It also reads from STDIN if no arguments are given.
This all works fine, but I also want to be able to redirect text streams to and from the program. This does not work. For instance,
Code:
echo "test" | ./a.out
does nothing. The program does not receive the input through stdin and outputs nothing to the terminal. Also, when the program is in this state, it will no longer receive interactive input from the command line.
I am using SYS_read with stdin (1) and SYS_write with stdout (0). In normal C programming with the fread family of functions, this gets handled automatically, so I don't understand why it doesn't work with system calls.
Any ideas?
How about strace and/or gdb?
Maybe I could say something about your program if I saw the source...
Also, according to strace, there is nothing coming in from the redirected text stream, but when something is redirected to the program it fails to write to stdout (0) with "EBADF (Bad file descriptor)". It still seems to read interactive user input fine, just not any text piped into it.
Ahha! Silly me... always some stupid mistake. Well that's one mystery solved.
Now why did it work at all before when I was reading from stdout and writing to stdin?
Because both were special file /dev/tty
Of course, it is not guaranteed that you can read from stdout in any context, but also it is not guaranteed that you cannot.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.