popen as already stated is either read-only or write-only, never bidirectional.
Quote:
Originally Posted by JonhyM
open xterm once and read and write to/from it, i dont even know if this is possible
thanks for ur help .
That's pretty backwards. Sure it's possible, but it's also a silly amount of work in this circumstance. Especially when what you want is so tricky (not just pipes, but fairly unbuffered I/O). Why not have xterm run your program? Then you get everything done the way you want with one hit of the enter key.
Last edited by Corona688; 12-14-2010 at 11:17 AM..
cause i needed to execute commands FROM my application and get the output, and executing commands one by one is very silly, and also i thought it would be a nice thing to learn from, and i was hoping u ppl could help.
i been trying for days now.... and i guess i have to keep trying
I'm out of time today, but I'll post more example code tomorrow.
If I knew exactly what you were trying to do, not just the kind of solution you believe is necessary, I could help you better. The thing is, running your code in an xterm instead of vice versa will take care of all the difficult problems for you, and there's very likely a way to do exactly what you want from within one instead of vice versa.
my application is totally something not related to xterm, it has a gui and everything, but im not good with coding yet as u can see, so im gonna execute terminal commands insted of coding them for now.
im trying to do it that way so i dont have to modify the whole code each time i add new stuff
here is another sample, i worked on it, but was never abel to get it to wok
i tried replacing the sockets with a file using fopen so it writes output to disk, but never worked, i also tried using pipes, but it was too much for me.
i appreciate any help u could provide.
thanks for ur time...
my application is totally something not related to xterm, it has a gui and everything, but im not good with coding yet as u can see, so im gonna execute terminal commands insted of coding them for now.
So? There's still nothing whatsoever stopping you from running your code inside a terminal in the meantime. Things that need a terminal should be run in a terminal. That's how console applications work. That's how xterm expects to work. That's what they're there for. If you told me what your program needed to do, instead of the bizzare way you're hellbent on doing it, I could show you the proper way to do it.
This doesn't do what you think it does, anyway:
'asdf' doesn't get printed to the terminal output, and cat doesn't read the terminal's input, because xterm is designed to communicate with a program running inside it.
In any case, here is your original goal, communicating with a program through pipes. We write 'asdf' to cat and read it back:
Note that this behavior may be undefined on your platform. The read end of the pipe might actually block until >512 bytes are written, or the writing end closes. You could try setting it nonblocking, but then things like cat will die with "resource temporarily unavailable" whenever the pipe isn't ready.
As it happens, xterm also has a slave mode:
where the bolded part is the file descriptor to read and write from.
This doesn't work with pipes. xterm reads and writes from the same descriptor, but pipes only go one way.
a socketpair() might work, but that's no guarantee.
I maintain, though, that this is a self-defeating design -- and a ridiculous amount of work for code you don't even intend to use. 40 lines of pseudocode for your plan, 8 lines of real, working code to do this the correct way:
And what if you want to run it on a machine where xterms aren't available, but a text terminal is?
Just run it in a terminal already, you'll get everything you want.
Last edited by Corona688; 12-15-2010 at 01:00 PM..
thanks for ur help
but my application never runs in xterm, its clicked and a gui is shown, all it does is that it saves me alot of typing in the terminal, all those flags and stuff, for example : just click the "Take Screen Shot" button and it will take a screen shot and save it with a specific sequenced name under /home/user/Screen Shots.
i cant open a terminal and run whats supposed to be wrapping terminal, its clicks application
and i need it this specific way cause i have some other stupid project in mind that will need it that way, tunnel output from xterm.
if u take a look at the last sample i posted, thats exactly what i need, except i tried making it write ouput to a file or pipe insted of sockets, but failed.
if u can show me hos its done, it would fix everything...
if u can help achive it this way, i would be grateful.
if u can't, all good u helped me so much already
Your goal is to run it in one mouseclick, with options, and without having to type them in? But still have your program able to communicate with a terminal? Easy: Create a shortcut (or script) which does this:
...and you're done!
Better yet, when you don't need the terminal anymore, you can just not use the terminal. There's nothing to take away from your code.
Please, please, please just try it.
Against my better judgement, I already wrote an entire example for you about that from scratch and explained, in detail, why it wouldn't work for xterm, and what hacks might make it possible.
When you're trying to connect to your own code with network sockets, it's a red flag that your design's the wrong way around. If you tell me exactly what you think you can't do, I'll show you how to do so. It'll be a thousand times less work.
Last edited by Corona688; 12-15-2010 at 06:10 PM..
when i do something like this:
bona=$(echo hi2 > /dev/pts/1 ; printf '%s\n' "" | sed '/^$/d')
i get:
hi2
and the $bona variable is empty, when I run:
echo ${bona}
i get the result "hi2" outside of the variable. I want it stored in the bona variable with nothing outputted to the... (6 Replies)
I have been having an extremely annoying problem. For the record, I am relatively new at this. I've only been working with unix-based OS's for roughly two years, mostly Xubuntu and some Kali. I am pretty familiar with the BASH language, as that's the default shell for debian. Now, I've made this... (16 Replies)
Im using a X-Terminal in my windows pc to connect to a Linux server.
Is there a way to know my local IP address in my x-terminal console?
Here are few commands which didnt help me:
ss_cc@MGTS5026-13sh1:~> finger
Login Name Tty Idle Login Time Where
loadhlr ... (6 Replies)
When ever i started my terminal,Every time I have to change the directory like "cd user/documents/ravi/folder2/folder3" Without typing this entire command every time ,I placed "alias c='cd user/documents/ravi/folder2/folder3'" in .bash_profile file. so that i can able to execute command 'c'... (6 Replies)
Hello everybody,
I'm testing some aspects of X Terminal implementation and it's going great. I can use remote applications on my local slow workstation at remote's processor speed by redirecting the remote DISPLAY variable to "my_local_ip:0.0"; but i'm having troubles to get remote audio and... (2 Replies)
Hi,
I want to save the whole Output of the terminal in a file. I dont want to redirect a single command to a file (ls -l > test.txt), I want to redirect the whole last 40 lines into a file.
Maybe i can read out the terminal while working with it, but i cant find a way to save the whole... (2 Replies)
Hi
Can i ask?
I had multiple solaris workstation running and some local users using it. Is it possible to bind to the local user terminal or console he's using as if like the user well type and I can see it and what my typing in the local user see it also.
Is it possible..
Thanks. (3 Replies)
ssh $USR@$host /bin/bash <<EOF
awk ' BEGIN{f=0} !f { s=$0; sub(/,.+/, "", s); gsub(//, " ", s); t=(systime()-mktime(s)); if(t<=14400) f=1 } f ' /home/error.log >> error.txt
EOFWe are trying to connect to a remote server through ssh and read values from error.log within last 4 hours.However, the... (3 Replies)
Hi guys;
I want to show what am I doing on a terminal into another. I did something close but its not working really good.
Example: cat /dev/pts/12 >/dev/pts/13
where 12 is my terminal and 13 its the other terminal.
This is usefull for me to share my small unix knowledge to other people... (4 Replies)