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:
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
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:
Wüsste aber nicht, wieso ich eine "bad pipe" übergeben haben soll, bei anderen Programmen hat das so super funktioniert
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