Re: Using NSPipe to get system command output
Re: Using NSPipe to get system command output
- Subject: Re: Using NSPipe to get system command output
- From: Ken Thomases <email@hidden>
- Date: Mon, 13 Aug 2012 18:38:32 -0500
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@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