Re: NSTask and pseudo TTY
Re: NSTask and pseudo TTY
- Subject: Re: NSTask and pseudo TTY
- From: "James W. Walker" <email@hidden>
- Date: Sun, 28 Mar 2010 14:58:54 -0700
On Mar 28, 2010, at 2:29 PM, Ken Thomases wrote:
> 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.)
I'll be darned, closing the slave descriptor after launching the task did the trick. Now that I'm getting all the read notifications, I don't care about NSTaskDidTerminateNotification, so I'm in business. Thank you very much.
_______________________________________________
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