Wow, thanks for your help, Alistair! I'll try it out. cheers, Siemen
On Sun, May 6, 2018 at 7:47 PM, Alistair Grant <[email protected]> wrote: > Hi Siemen & Mariano, > > On 5 May 2018 at 16:26, Mariano Martinez Peck <[email protected]> > wrote: > > Hi Siemen, > > > > You may want to check the pipe support code in OSSubprocess [1]. Note > that > > the pipes should work outside of OSSubprocess. You can read the > > documentation as well as the unit tests for the pipes. > > > > Cheers, > > > > [1] https://github.com/marianopeck/OSSubprocess > > OSSPipe seems to assume that is controlling both ends of the pipe, > while it may be that Siemen just wants to read from the pipe. Anyway, > Mariano mentioned that pipes should work outside of OSSubprocess, and > I've made some modifications to FilePlugin which should facilitate > that, so thought I'd have a go. This still doesn't completely meet > Siemen's requirements as it polls the stream, but... I've attached a > little demo class, tested only on Ubuntu 16.04. Be warned, I've never > used Unix pipes before, so feel free to critique the code: > > > NamedPipeEcho provides sample code showing how to read from a Unix > named pipe and echo the contents to stdout. > > Interesting attributes of the sample code include: > > - It is just a sample, it isn't intended to be production ready. > - It marks the pipe non-blocking so that multiple pipes can be > processed without the image blocking when reading. > - It's polling, rather than event driven. > - It doesn't have any external dependencies outside the core Pharo > image and standard Pharo VM. > - It defines a method that directly calls a primitive - I consider > this bad practice and would like to make the primitive generally > available through FilePlugin. > > > The simplest way to run this is in one terminal (bash shell): > > $ mkfifo /dev/shm/pharopipe > $ pharo --headless Pharo.image eval "(NamedPipeEcho on: > '/dev/shm/pharopipe') run" > > and in a second terminal (bash shell): > > $ pharo --headless Pharo.image eval "NamedPipeEcho sampleWriteTo: > '/dev/shm/pharopipe'" > > You should see: > > Hello World > Line 2 > > in the first terminal, with a 15 second delay between the lines and exit. > > > There's also AsyncFile, which should make it event driven instead of > polled, but I haven't had a chance to look at that yet. > > This is tested with: > > > Pharo7.0alpha > Build information: > Pharo-7.0+alpha.build.839.sha.675decd24230e0ef7d1579af07c2112c104c6d7b > (64 Bit) > > > 5.0-201804122226 Thu Apr 12 22:34:48 UTC 2018 gcc 4.8 [Production > Spur 64-bit VM] > CoInterpreter VMMaker.oscog-eem.2361 uuid: > 7ca2f89a-de70-422f-b92b-54f91ac4e47b Apr 12 2018 > StackToRegisterMappingCogit VMMaker.oscog-eem.2361 uuid: > 7ca2f89a-de70-422f-b92b-54f91ac4e47b Apr 12 2018 > VM: 201804122226 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ > Date: Thu Apr 12 15:26:17 2018 -0700 $ CommitHash: 07c6dc3 $ > Plugins: 201804122226 https://github.com/OpenSmalltalk/opensmalltalk- > vm.git $ > Linux travis-job-b95e67e4-9fb2-4d69-a59f-1fbf859b912c > 4.4.0-101-generic #124~14.04.1-Ubuntu SMP Fri Nov 10 19:05:36 UTC 2017 > x86_64 x86_64 x86_64 GNU/Linux > plugin path: /home/alistair/pharo7/Issue21692/vm/pharo-vm/lib/ > pharo/5.0-201804122226 > [default: /home/alistair/pharo7/Issue21692/vm/pharo-vm/lib/ > pharo/5.0-201804122226/] > > > Earlier VMs probably won't work as #atEnd will always return true or > false (I forget which). > > Cheers, > Alistair >
