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
