changeset 6320:6338017166e4

[project @ 2007-02-16 20:26:11 by dbateman] 3
author dbateman
date Fri, 16 Feb 2007 20:26:11 +0000
parents e7e7c338bf99
children 363a2f8c9e97
files scripts/miscellaneous/popen2.m
diffstat 1 files changed, 0 insertions(+), 127 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/miscellaneous/popen2.m	Fri Feb 16 11:14:44 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-## Copyright (C) 1996, 1997 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave is free software; you can redistribute it and/or modify it
-## under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2, or (at your option)
-## any later version.
-##
-## Octave is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with Octave; see the file COPYING.  If not, write to the Free
-## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-## 02110-1301, USA.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {[@var{in}, @var{out}, @var{pid}] =} popen2 (@var{command}, @var{args})
-## Start a subprocess with two-way communication.  The name of the process
-## is given by @var{command}, and @var{args} is an array of strings
-## containing options for the command.  The file identifiers for the input
-## and output streams of the subprocess are returned in @var{in} and
-## @var{out}.  If execution of the command is successful, @var{pid}
-## contains the process ID of the subprocess.  Otherwise, @var{pid} is
-## @minus{}1.
-##
-## For example,
-##
-## @example
-## @group
-## [in, out, pid] = popen2 ("sort", "-nr");
-## fputs (in, "these\nare\nsome\nstrings\n");
-## fclose (in);
-## EAGAIN = errno ("EAGAIN");
-## done = false;
-## do
-##   s = fgets (out);
-##   if (ischar (s))
-##     fputs (stdout, s);
-##   elseif (errno () == EAGAIN)
-##     sleep (0.1);
-##     fclear (out);
-##   else
-##     done = true;
-##   endif
-## until (done)
-## fclose (out);
-##      @print{} are
-##      @print{} some
-##      @print{} strings
-##      @print{} these
-## @end group
-## @end example
-## @end deftypefn
-
-## Author: jwe
-
-function [in, out, pid] = popen2 (command, args)
-
-  in = -1;
-  out = -1;
-  pid = -1;
-
-  if (nargin == 1 || nargin == 2)
-
-    if (nargin == 1)
-      args = "";
-    endif
-
-    if (ischar (command))
-
-      [stdin_pipe, stdin_status] = pipe ();
-      [stdout_pipe, stdout_status] = pipe ();
-
-      if (stdin_status == 0 && stdout_status == 0)
-
-        pid = fork ();
-
-        if (pid == 0)
-
-	  ## In the child.
-
-          fclose (nth (stdin_pipe, 2));
-          fclose (nth (stdout_pipe, 1));
-
-          dup2 (nth (stdin_pipe, 1), stdin);
-          fclose (nth (stdin_pipe, 1));
-
-          dup2 (nth (stdout_pipe, 2), stdout);
-          fclose (nth (stdout_pipe, 2));
-
-          if (exec (command, args) < 0)
-            error ("popen2: unable to start process `%s'", command);
-            exit (0);
-          endif
-
-        elseif (pid)
-
-	  ## In the parent.
-
-          fclose (nth (stdin_pipe, 1));
-          fclose (nth (stdout_pipe, 2));
-
-          if (fcntl (nth (stdout_pipe, 1), F_SETFL, O_NONBLOCK) < 0)
-            error ("popen2: error setting file mode");
-          else
-            in = nth (stdin_pipe, 2);
-            out = nth (stdout_pipe, 1);
-          endif
-
-        elseif (pid < 0)
-          error ("popen2: fork failed -- unable to create child process");
-        endif
-      else
-        error ("popen2: pipe creation failed");
-      endif
-    else
-      error ("popen2: file name must be a string");
-    endif
-  else
-    print_usage ();
-  endif
-
-endfunction