[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 09:45:38 +0900 (JST) |
----- Original Message -----
> From:
> To: "octave-maintainers" <octave-maintainers>
> Cc:
> Date: 2016/5/2, Mon 07:09
> Subject: Re: fork() for microsoft windows (native but not Cygwin).
>
> --- tmacchant wrote:
>> > 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?
>>
> I don't see the octave manual and explanation of spawnvp. The spawnvp is
> not able to use for the octave fork().
>
> We have to write it using windows api like popen2 on octave for windows.
>
> Tatsuro
Perhaps this is the start to implement fork() on windows.
https://www.cygwin.com/faq.html#faq.api.fork
One need to look the code how the Cygwin actually implement the fork().
Tatsuro