I have used fork and wait directly from libc.
Presumably calling pipe and execve after fork shouldn't be difficult.
I believe the process has to be wait-ed here.

> On Apr 5, 2017, at 10:17 AM, bill lam <[email protected]> wrote:
> 
> 2!:2 had broken for a very long time, the numbers returned
> are file pointer (FILE*) not file descriptor. The following can
> give some sensible output, but still incomplete.
> 
> fread=: 1!:1
> fwrite=: 1!:2
> run=: 4 : 0
> echo 'p fi fo'=. 2!:2 x
> echo i=. 'libc.so.6 fileno > i x'&cd fi
> echo o=. 'libc.so.6 fileno > i x'&cd fo
> y fwrite i          NB. Write to its input
> z=.fread o          NB. Read its output
> z                   NB. Result
> )
> 
> now running:
>   '/bin/cat' run 'dog'
> 3872 93921913337728 93921913453968
> 4
> 7
> dog
> 
> 
> Ср, 05 апр 2017, Danil Osipchuk написал(а):
>> Greetings, everyone
>> 
>> I'm not able to appy (2!:2). I wonder if it is working as intended - the
>> results I get are confusing.
>> 
>> Two sources of documentation are available:
>> 
>> Dictionary entry suggests it should return a list of (pid stdin stdout), in
>> that order.
>> 
>> 2!:2 y Host IO. (Unix only.) The host command line y is passed to /bin/sh
>> for processing, connecting two file numbers to the command’s standard input
>> and output. The result is a 3-element list of the process id of the task
>> started and the file numbers associated with its standard input and output.
>> These file numbers also appear in the result of 1!:20 . In this case,
>> instead of appearing with a name they appear with the command line,
>> prefixed by > (standard input) or < (standard output). The files associated
>> with the process should be closed with 1!:22 when no longer in use. See
>> also 2!:3 for a verb to wait for processes to complete.
>> 
>> Example from user guide http://www.jsoftware.com/help/user/stdin_stdout.htm
>> implies a different order of (pid stdout stdin):
>> 
>> run=: 4 : 0
>> 'p o i'=. 2!:2 x    NB. Run command, save Process, Output, Input
>> y fwrite i          NB. Write to its input
>> fclose i            NB. Close its input
>> 2!:3 p              NB. Wait for process to terminate
>> z=.fread o          NB. Read its output
>> fclose o            NB. Close its output
>> z                   NB. Result
>> )
>> 
>> ====
>> 
>> Now in a console session:
>> 
>> NB: version:
>> 
>>     9!:14 ''
>> j805/j64/linux/release/commercial/www.jsoftware.com/2016-12-11T08:02:52
>> 
>> NB. try to open cat in a hope to read a copy of what is being write into
>> stdin
>>   (2!:2) '/bin/cat'
>> 3166 26802912 26767136
>> 
>> NB. I would expect a small integers for stdin/stdout as file descriptors,
>> but that is just expectation of course, may be this is something else
>> 
>> NB. trying to append to stdin according to the description first:
>>   'hey ther' (1!:3) 26802912
>> |file number error
>> |   'hey ther'    (1!:3)26802912
>> NB. now according the user guide:
>>   'hey ther' (1!:3) 26767136
>> 
>> NB. looks like stdin is last in the list, append worked for it
>> 
>> NB. trying to close stdin:
>> 
>>   (1!:22) 26767136
>> |domain error
>> |       (1!:26767136)26767136
>> 
>> 
>> NB. result of the attempt to close the stdin looks weird.
>> 
>> NB. let us try to open existing file to find out how a descriptor should
>> look like, because it used to be a small integer
>> NB. 1!:21 y Open. Open file named y, creating it if necessary; result is a
>> file number.
>> 
>> (1!:21) <'test.txt'
>> asdf
>> 
>> NB. contents of file returned instead of number?
>> 
>>   (1!:21) < 'nonexistent'
>> |domain error
>> |   (1    !:'nonexistent')<'nonexistent'
>>   (1!:21)  'nonexistent'
>> |ill-formed number
>> 
>> NB. had to double check glass lenses and description for the file family
>> foreigns
>> NB. something wrong goes here - file foreigns look messed up at this point
>> 
>> ======
>> Just to check my own sanity in a fresh session file foreigns work fine of
>> course:
>> danil@dalu:~/L/j64-805$ ./jconsole.sh
>> 
>>   (1!:21) <'asdff.txt'
>> 9980640
>>   (1!:22) 9980640
>> 1
>>   (1!:21) <'test.txt'
>> 9944944
>> 
>>   (1!:22) 9944944
>> 1
>>   danil@dalu:~/L/j64-805$
>> 
>> regards,  Danil
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
> 
> -- 
> regards,
> ====================================================
> GPG key 1024D/4434BAB3 2008-08-24
> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to