0
我正在使用FSEventStreamCreate來監視.Trash目錄。 我的回調函數是一個靜態函數,只要.Trash發生變化就會執行該函數。NSTask waitUntilExit未按預期方式工作
在回調函數中,我需要運行一個腳本來獲得一些狀態,通過NSPas的NSTask。當第一次執行[ls waitUntillExit]時,函數會從頭再次執行。該程序通常在第二次達到時從[ls waitUntillExit]繼續。我的代碼有什麼問題。 [從編號1到編號2的代碼執行2次]
這是我的FSEvent的myCallbackFunction的代碼。
static void myCallbackFunction(
ConstFSEventStreamRef streamRef,
void *clientCallBackInfo,
size_t numEvents,
void *eventPaths,
const FSEventStreamEventFlags eventFlags[],
const FSEventStreamEventId eventIds[])
{
////////////////number 1////////////
int i;
FILE *fp;
char path[1035];
/* Open the command for reading. */
fp = popen("/bin/ls ~/.Trash/POC3.app", "r");
if (fp == NULL) {
printf("Failed to run command\n");
exit(0);
}
i=0;
while (fgets(path, sizeof(path)-1, fp) != NULL) {
i++;
}///////if the file POC.app exists in trash execute this//////////////////
if(i!=0){
NSTask *ls=[[NSTask alloc]init] ;
NSPipe *pipe1=[NSPipe pipe];
NSData *data ;
NSString *tmpString;
[ls setStandardOutput:pipe1];
NSString *execPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"script"];
[ls setLaunchPath:execPath];
[ls setArguments:[NSArray arrayWithObjects:@"hello",nil]];
[ls launch];
[ls waitUntilExit];
///////////////number 2/////////////////
data = [[[ls standardOutput] fileHandleForReading] availableData];
if ((data != nil) && [data length]) {
tmpString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
//some other functionality follows here
}
}