*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->IRIX man pages -> perl5/IPC::Open2 (3)              


IPC::Open2(3)							 IPC::Open2(3)

NAME    [Toc]    [Back]

     IPC::Open2, open2 - open a	process	for both reading and writing

SYNOPSIS    [Toc]    [Back]

	 use IPC::Open2;
	 $pid =	open2(\*RDR, \*WTR, 'some cmd and args');
	   # or
	 $pid =	open2(\*RDR, \*WTR, 'some', 'cmd', 'and', 'args');

DESCRIPTION    [Toc]    [Back]

     The open2() function spawns the given $cmd	and connects $rdr for reading
     and $wtr for writing.  It's what you think	should work when you try

	 open(HANDLE, "|cmd args|");

     The write filehandle will have autoflush turned on.

     If	$rdr is	a string (that is, a bareword filehandle rather	than a glob or
     a reference) and it begins	with ">&", then	the child will send output
     directly to that file handle.  If $wtr is a string	that begins with "<&",
     then WTR will be closed in	the parent, and	the child will read from it
     directly.	In both	cases, there will be a dup(2) instead of a pipe(2)

     open2() returns the process ID of the child process.  It doesn't return
     on	failure: it just raises	an exception matching /^open2:/.

WARNING    [Toc]    [Back]

     It	will not create	these file handles for you.  You have to do this
     yourself.	So don't pass it empty variables expecting them	to get filled
     in	for you.

     Additionally, this	is very	dangerous as you may block forever.  It
     assumes it's going	to talk	to something like bc, both writing to it and
     reading from it.  This is presumably safe because you "know" that
     commands like bc will read	a line at a time and output a line at a	time.
     Programs like sort	that read their	entire input stream first, however,
     are quite apt to cause deadlock.

     The big problem with this approach	is that	if you don't have control over
     source code being run in the child	process, you can't control what	it
     does with pipe buffering.	Thus you can't just open a pipe	to cat -v and
     continually read and write	a line from it.

SEE ALSO    [Toc]    [Back]

     See the IPC::Open3	manpage	for an alternative that	handles	STDERR as
     well.  This function is really just a wrapper around open3().

									Page 1

IPC::Open2(3)							 IPC::Open2(3)

									PPPPaaaaggggeeee 2222
[ Back ]
 Similar pages
Name OS Title
IPC::Open3 IRIX open a process for reading, writing, and error handling
open IRIX open for reading or writing
open Tru64 Open a file for reading or writing
open HP-UX open file for reading or writing
creat Tru64 Open a file for reading or writing
open FreeBSD open or create a file for reading or writing
open NetBSD open or create a file for reading or writing
TIFFOpen IRIX open a TIFF file for reading or writing
open OpenBSD open or create a file for reading or writing
XTIFFOpen IRIX open an extended TIFF file for reading or writing
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service