On Aug 13, 2012, at 5:42 PM, Kyle Sluder wrote:

> On Mon, Aug 13, 2012, at 02:17 PM, Charlie Dickman wrote:
>> I'm trying to get the output from a vm_stat command using the following
>> code. My app hangs in the [vmRead availableData] call as it should if
>> there is no data available but it never comes back. What am I doing
>> wrong? I have searched through the sample code on apples developer site
>> with no luck.
>> 
>>      NSPipe *vmPipe = [NSPipe pipe];
>>      NSFileHandle *vmRead = [vmPipe fileHandleForReading];
>> 
>>      [vm setLaunchPath: @"/usr/bin/vm_stat"];        //      1 page = 4096 
>> bytes
>>      [vm setStandardOutput: vmPipe];
>>      [vm launch];
>>      NSData *vmData = nil;
>>      int vmDataLength = 0;
>>      do {
>>              vmData = [vmRead availableData];
>>              vmDataLength = [vmData length];
>>      } while (vmDataLength != 0);
> 
> 
> You can't do this. You need to run the runloop.

For what?  Neither NSPipe nor NSFileHandle rely on the runloop except for the 
InBackgroundAndNotify methods, as far as I'm aware.  They are just thin 
wrappers around system calls.

You need to run the runloop to get notified of an NSTask's termination, too, 
but he's not relying on that.

Of course, he is potentially blocking his main thread, if this is run on the 
main thread, which is always bad.  But the code should work.

Regards,
Ken


_______________________________________________

Cocoa-dev mailing list ([email protected])

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to