linux inotify on a std.process.ProcessPipes ?

Justin Whear via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Nov 16 16:58:18 PST 2015


On Mon, 16 Nov 2015 23:08:46 +0000, opla wrote:

> Does anyone know if it's possible to monitor the events that happen on
> the output stream of a piped process ?
> 
> I'm stuck on doc:
> 
> - https://www.win.tue.nl/~aeb/linux/lk/lk-12.html -
> http://www.ibm.com/developerworks/library/l-ubuntu-inotify/
> - http://linux.die.net/man/2/inotify_add_watch
> 
> inotify_add_watch second argument seems to be a file name. The only
> thing available is a std.stdio.File with a handle.
> 
> The goal is to create an asynchronous process with a least one
> notification that would happen when the process terminates, maybe when
> the output stream is written too.

You can use poll on the file descriptor (which can be gotten with 
File.fileno).  Basically something like this (untested):

while (ImWaiting)
{
	if (processPipes.stdout.eof)
	{
		// The child is done writing (has exited, generally 
speaking)
	}

	//TODO set up poll items
	pollfd pfd = { processPipes.stdout.fileno, POLLIN };

	// Use 0 for timeout so that we don't wait;  if you don't have 
anything else
	//  to do, you can use a real timeout value
	if (1 == poll(&pfd, 1, 0))
	{
		// New data is available on the child's stdout, do 
something with it
	}

	// Do other things, sleep, etc.
}


More information about the Digitalmars-d-learn mailing list