What is causing the following program to hang after it has displayed all of the
directory
entries? I'm sure it has something to do with one of the pipes being held open, but
how do
I keep that from happening? Is there a better way to do reading and writing through a
pipe
to a process?
BTW, I've seen a Java version of an ftp class, has anyone written a objective-c
version?
Thanks,
david.
#import <Foundation/Foundation.h>
int main (int argc, char *argv[])
{
NSAutoreleasePool *arp = [[NSAutoreleasePool alloc] init];
NSTask *pipeTask = [[NSTask alloc] init];
NSPipe *pipeInput = [NSPipe pipe];
NSPipe *pipeOutput = [NSPipe pipe];
NSFileHandle *readHandle = [pipeInput fileHandleForReading];
NSFileHandle *writeHandle = [pipeOutput fileHandleForWriting];
NSData *inData = nil;
NSString *openString = @"open hostname\n";
NSString *loginString = @"user xyz password\n";
NSString *listString = @"dir\n";
NSString *quitString = @"quit\n";
[pipeTask setLaunchPath:@"/bin/ftp"];
[pipeTask setArguments:[NSArray arrayWithObjects:@"-i", @"-n", nil]];
if (pipeTask)
{
[pipeTask setStandardOutput:pipeInput];
[pipeTask setStandardInput:pipeOutput];
[pipeTask launch];
[writeHandle writeData:[openString dataUsingEncoding:NSASCIIStringEncoding]];
[writeHandle writeData:[loginString dataUsingEncoding:NSASCIIStringEncoding]];
[writeHandle writeData:[listString dataUsingEncoding:NSASCIIStringEncoding]];
while ((inData = [readHandle availableData]) && [inData length])
{
NSLog (@"%@", [[[NSString alloc] initWithData:inData
encoding:NSASCIIStringEncoding]
autorelease]);
}
[writeHandle writeData:[quitString dataUsingEncoding:NSASCIIStringEncoding]];
}
[readHandle closeFile];
[writeHandle closeFile];
[pipeTask release];
}
--
=====================================================
= David Hinz MCI WorldCom =
= Internet and New Media Development =
= Email: [EMAIL PROTECTED] Phone: (303) 390-6108 =
= Vnet: 636-6108 Fax: (303) 390-6365 =
= Pager: 1-888-900-5732 (Interactive 2-way) =
=====================================================