[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
- fork() for microsoft windows (native but not Cygwin).,
Tatsuro MATSUOKA <=