Problem mit NSTask (Cocoa framework)

Ich bin gerade dabei, ein Programm zu schreiben, das unter anderem aus einer Datei ein tar archiv erstellen soll. Dazu habe ich folgende Funktion geschrieben:
Code:
NSDictionary *MSCreateArchiveOfFileAtPath(NSString *filePath)
{
	NSString *theFileDir = [filePath stringByDeletingLastPathComponent];
	NSString *theFileName = [filePath lastPathComponent];
	
	NSString *zipExec = MSPathOfExecutable(@"tar");
	
	NSArray *taskArguments = [NSArray arrayWithObjects:@"--create", @"--gzip", @"--directory", theFileDir, theFileName, nil];
	
	NSPipe *pipe = [NSPipe pipe];
	
	NSTask *tarTask = [[NSTask alloc] init];
	[tarTask setLaunchPath:zipExec];
	[tarTask setArguments:taskArguments];
	[tarTask setStandardOutput:pipe];
	
	[tarTask launch];
	[tarTask waitUntilExit];
	
	NSData *theFileData = [[pipe fileHandleForReading] readDataToEndOfFile];
	NSString *theFileSize = [NSString stringWithFormat:@"%i", [theFileData length]];
	NSString *theMD5Sum = [theFileData md5Hash];
	
	NSArray *fileDescriptionKeys = [NSArray arrayWithObjects:@"file", @"fileSize", @"fileChecksum", nil];
	NSArray *fileDescriptionValues = [NSArray arrayWithObjects:theFileData, theFileSize, theMD5Sum, nil];
	
	return [NSDictionary dictionaryWithObjects:fileDescriptionValues forKeys:fileDescriptionKeys];
}

Das Problem ist nun, dass das ganze bei [tarTask launch]; hängen bleibt, sprich, der Task gar nie beendet wird. Ich habe mal versuchsweise [tarTask waitUntilExit] mit
Code:
while ([tarTask isRunning]) {
    NSLog(@"still running...");
}

ersetzt. Viel gebracht hat das auch nicht, abgesehen davon, dass ich etwa 10 Meldungen pro 1/100 sekunde gekriegt hab ;)
Ich habe tar auch auf der Kommandozeile mit denselben Argumentent laufen lassen (tar --create --gzip --directory <pfadZuOrdner> <DateiName>) und habe ein funktionierendes Archiv gekriegt.

Weiss jemand von euch, woran das liegen könnte? Habe ich irgendwo einen logischen Fehler, den ich nicht gesehen habe?

EDIT:
Ich habe die Funktion mal in einen eigenen Thread ausgelagert und dann in der Konsole folgende Meldung gekriegt:
Code:
tar (child): -: Cannot write: Bad file descriptor
tar (child): Error is not recoverable: exiting now

gzip: stdout: Broken pipe
/usr/bin/tar: Child returned status 2
/usr/bin/tar: Error exit delayed from previous errors
Wüsste aber nicht, wieso ich eine "bad pipe" übergeben haben soll, bei anderen Programmen hat das so super funktioniert
 
Zurück
Oben