2013-05-30 2 views
1

Я работаю над Mac OSX и использую bash в терминале. Я программирую на C, и у меня возникают проблемы с использованием system() в цикле for. Я понимаю, что я пытаюсь сделать, может быть выполнено с помощью сценария оболочки, но я пытаюсь распараллелить процесс, и в настоящее время я знаю, как это сделать с программированием openmp в C.Обновление строки в цикле for, используемой для передачи в систему

Общая идея - позвонить исполняемый файл ./program с тремя входами для этой программы: целым числом, строкой и двойным. Я хотел бы назвать программу 100 раз с различными входами. В настоящее время я поражен, пытаясь понять, как передать строку в system(), которая обновляется циклом for. Я должен отметить, что строка («sub»), используемая для ввода, также обновляется, чтобы получать данные из разных папок (отформатированных как: folder0000, folder0001 и т. Д.)!

Моя попытка выглядит следующим образом:

#include <stdio.h> 
#include <string.h> 

int main(){ 

    int spot; 
    double X; 
    char command[50]; 

    #pragma omp parallel for private(command, path) 
    for(X=0, spot=0; spot<100; X+=0.005, spot++){ 
     char path[50]; 
     strcpy(path, "/home/folder%04d", spot); 
     strcpy(command, "./program %d %s %lf", 50, path, X); 
     system(command); 
    } 

    return 0; 
} 

Одна ошибка, которую я получаю, очевидно, если вы знаете, как зЬгсру работы (которые я на самом деле не), является то, что я передаю это слишком много аргументов. Ему нравится только 2: strcpy (строка 1, строка 2). Я был вдохновлен, чтобы попробовать это, прежде чем понимать strcpy, подражая тому, как печатать два раза, целые числа и т. Д.

Является ли это каким-то другим способом, я могу выполнить то, что я пытаюсь сделать? Спасибо за любую помощь, которую вы, ребята, можете предложить.

ответ

1

Похоже, что вы ищете sprintf(3):

sprintf(path, "/home/folder%04d", spot); 
sprintf(command, "./program %d %s %lf", 50, path, X); 
+0

Большое спасибо, это именно то, что мне было нужно. Я считаю, что программа работает, однако, я не думаю, что она работает параллельно, и это то, что мне нужно будет изучить ... Еще раз спасибо за вашу помощь. –

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