[lug] named pipe missunderstanding
Stephen Queen
svqueen at gmail.com
Thu Feb 3 07:48:13 MST 2011
On Wed, Feb 2, 2011 at 6:01 PM, jeffrey.haemer at gmail.com
<jeffrey.haemer at gmail.com> wrote:
> Caveat Programmor (let the programmer beware):
> FIFOs (named pipes) are POSIX IPCs that live in the filesystem name space
> and have standardized semantics.
> However, they're creations of the kernel, which owns and manages the data.
> If you create one in a filesystem that's NFS-mounted, and assume you can
> use it to communicate with a process on another machine, you are asking for
> trouble.
> I have asked for trouble like this before, and reliably found some. :-)
>
> Probably not the cause of the problem under discussion, but worth a mention
> while we're on this topic.
Just some bash code I've played with in the past. It uses netcat (nc)
and named pipes.
This is a daemon that runs on a remote computer that you want to
execute a command on. (WARNING very insecure, just for fun and demo).
#!/bin/bash
#the_nc_daemon
# Listens on port for command and then sends the
# response back
trap "GO=0 ; echo quitting now" 2
GO=1
mkfifo /tmp/backpipe0
while [ $GO -eq 1 ]
do
nc -l -p 9778 < /tmp/backpipe0 | ./runcmd > /tmp/backpipe0
done
rm /tmp/backpipe0
exit 0
This is the client that communicates with it from a local computer.
This command takes the double quoted first command line argument and
pipes it to the stdin of a nc client that connects to the server that
is passed as a double quoted second command line argument. The -w1
switch allows the server 1 second to respond with the results of the
command. This should be adjusted for commands that may take a while to
produce results.
#!/bin/bash
cmd=$1
cmdserver=$2
echo $cmd | nc $cmdserver 9778 -w1
Here is the runcmd script
#!/bin/sh
if [ -z $1 ] ; then
read cmd
else
cmd=$1
fi
$cmd
exit 0
More information about the LUG
mailing list