Re: NSTask and pseudo TTY
Re: NSTask and pseudo TTY
- Subject: Re: NSTask and pseudo TTY
- From: Ken Thomases <email@hidden>
- Date: Sun, 28 Mar 2010 16:29:26 -0500
On Mar 28, 2010, at 1:56 PM, James W. Walker wrote:
> I've been running NSTask and reading the output using -[NSFileHandle readInBackgroundAndNotify], but in certain situations there was a problem: Due to the block buffering of standard output, I wasn't getting notified as soon as some output had been produced. I don't have control over the code being run by NSTask. Some googling led me to believe that I need to use a pseudo tty instead of NSPipe to communicate with the NSTask. So, I called openpty, wrapped the file descriptors in NSFileHandles, set the slave handle as standard output of the NSTask, and called [masterHandle readInBackgroundAndNotify]. This almost worked. The problem is that I can't tell when the output is done. When I was using NSPipe, my NSFileHandleReadCompletionNotification observer method would get an NSData of length 0, which told me that there was no more data. Now, that doesn't happen. I tried observing NSTaskDidTerminateNotification, but that notification arrives before I've received all the data. Attempting to read more data with -[NSFileHandle availableData] just hangs.
>
> Can anyone lead me out of this mire?
After launching the task, is the parent closing the slave fd? I think it should and, if it does, the stream will get EOF (data of length 0) after the task terminates. (Although the ordering of the NSFileHandleReadCompletionNotification and NSTaskDidTerminateNotification notifications is arbitrary.)
Regards,
Ken
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden