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

Reply via email to