[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: fork() for microsoft windows (native but not Cygwin).
From: |
Tatsuro MATSUOKA |
Subject: |
Re: fork() for microsoft windows (native but not Cygwin). |
Date: |
Mon, 2 May 2016 04:47:48 +0900 (JST) |
> From: Tatsuro MATSUOKA
> To: "octave-maintainers
> Cc:
> Date: 2016/5/2, Mon 04:26
> Subject: fork() for microsoft windows (native but not Cygwin).
>
> 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
In the gnulib manual,"9.287 fork"
https://www.gnu.org/software/gnulib/manual/html_node/fork.html
On Windows platforms (excluding Cygwin), this function is not implemented; use
spawnvp instead.
Can octave fork() be implemented by spawnvp but not by fork on windows?
Tatsuro