octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

fork() for microsoft windows (native but not Cygwin).


From: Tatsuro MATSUOKA
Subject: fork() for microsoft windows (native but not Cygwin).
Date: Mon, 2 May 2016 04:26:58 +0900 (JST)

In the discussion for parallel octave-forge package:
http://savannah.gnu.org/bugs/?41148


It should be checked the implementation of fork() on windows.
The native windows C compiler does not have a fork() function.

On octave prompt

>> help fork

tells that fork() on octave implemented in libinterp/corefcn/syscalls.cc.

I looked into the code of syscalls.cc.
(http://octave.org/doxygen/4.1/d7/dba/syscalls_8cc_source.html)

Around line 555,

555   DEFUNX ("fork", Ffork, args, ,
556         "-*- texinfo -*-\n\
<snip>
{

  578   octave_value_list retval;
  579 
  580   retval(1) = std::string ();
  581   retval(0) = -1;
  582 
  583   int nargin = args.length ();
  584 
  585   if (nargin == 0)
  586     {
  587       std::string msg;
  588 
  589       pid_t pid = octave_syscalls::fork (msg);
  590 
  591       retval(1) = msg;
  592       retval(0) = pid;
  593     }
  594   else
  595     print_usage ();
  596 
  597   return retval;
  598 }

In oct-syscalls.cc
(http://octave.org/doxygen/4.0/d5/d5e/oct-syscalls_8cc_source.html)
  107 pid_t
  108 octave_syscalls::fork (std::string& msg)
  109 {
  110   pid_t status = -1;
  111 
  112 #if defined (HAVE_FORK)
  113   status = ::fork ();
  114 
  115   if (status < 0)
  116     msg = gnulib::strerror (errno);
  117 #else
  118   msg = NOT_SUPPORTED ("fork");
  119 #endif
  120 
  121   return status;
  122 }

To my knowledge, fork() is not implemented in native windows.
Cygwin implements fork() because cygwin offers almost all posix APIs.

The discussion resemble for pipe() on windows but native windows completely
lacks the fork.  If we want to use fork on windows we should implement
it using windows API that perhaps in done on the Cygwin

Am I wrong?

Tatsuro



reply via email to

[Prev in Thread] Current Thread [Next in Thread]