2013-12-17 3 views
1

Я пишу приложение (CLI Based) в C, и я хочу иметь возможность запускать сценарий оболочки для выполнения команд уровня системы (это приложение OSX Specific). Есть ли способ сделать это? Я попробовал system(), но он говорит, что он недействителен с точки c99.Запуск сценария оболочки из приложения C

if (response == 'Y' || response == 'y') { 
     system("Support/script.sh"); 
     system("Support/deps.sh"); 
     printf("Success"); 
    } else { 
     printf("Good Bye!\n\n"); 
    } 
+1

"it"? Что говорит, что это недействительно? Это BS, 'system()' был даже в стандарте C89. –

+0

Не действует? Каково фактическое сообщение об ошибке? Вы включили 'stdlib.h'? – FatalError

+0

от «it» я имею в виду xcode, и да, я включил stdlib.h –

ответ

0

Проверить для текущих рабочих directory.Looks как тэ Support папку оленья кожа существовать в PWD. Mac OS X, основанный на objective-C, должен работать с системными вызовами.

Вот моя примерная программа, использующая popen, если она вам вообще нужна. (Только фрагмент моего кода .. не заполнен)

char unix_script[1000]; 
memset(unix_script,'\0',sizeof(unix_script)); 
snprintf(unix_script, 
      sizeof(unix_script), 
      "ksh /usr/mahesh/sessioN.ksh %s %s %s %s %s", 
      userId, 
      password, 
      database, 
      sbcr_id, 
      session_id); 
char *COMMAND = unix_script,*readLine, *tmp, *commandResult = ""; 
FILE * fp; 
int status; 

fp = popen(COMMAND, "w"); 

if (fp == NULL) { 
     perror("Command execution failed"); 
     exit(1); 
} 

//printf("Printing the command output...."); 
while ((fscanf(fp, "%s", &readLine)) != EOF) { 
     tmp = (char *) realloc(commandResult, strlen(readLine)); 
     commandResult = tmp; 
     strcpy(commandResult, readLine); 
} 
printf("\n output =\n %s\n",commandResult); 
status = pclose(fp); 
//printf ("Command %s exit status code = %d\n", COMMAND, status); 
return status; 
+0

спасибо, что человек помог кучам :) –

Смежные вопросы