1

私は Mac OSX で作業しており、ターミナルで bash を使用しています。C でプログラミングしていますが、for ループで system() を使用すると問題が発生します。私がやろうとしていることはシェルスクリプトで達成できることを理解していますが、プロセスを並列化しようとしています.現在、Cのopenmpプログラミングでそれを機能させる方法しか知りません.

一般的な考え方は、実行可能ファイル ./program を呼び出し、そのプログラムに 3 つの入力 (整数、文字列、倍精度) を指定することです。さまざまな入力でプログラムを100回呼び出したいと思います。現在、for ループによって更新される system() に文字列を渡す方法を見つけようとして、私は感銘を受けました。入力に使用されている (「サブ」) 文字列も、さまざまなフォルダー (フォルダー 0000、フォルダー 0001 などの形式) からデータを取得するために更新されていることに注意してください。

私の試みは次のようになります:

#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;
}

strcpy がどのように機能するかを知っていれば明らかなエラーの 1 つ (これは私にはわかりません) は、引数を渡しすぎていることです。strcpy(文字列 1, 文字列 2) のように 2 だけ取ります。strcpy を理解する前に、double や integer などを printf する方法を模倣することで、これを試すように促されました。

これは、私がやろうとしていることを達成できる他の方法ですか? 皆さんが提供できる助けをありがとう。

4

1 に答える 1

1

あなたが探しているようですsprintf(3)

sprintf(path, "/home/folder%04d", spot);
sprintf(command, "./program %d %s %lf", 50, path, X);
于 2013-05-30T20:31:09.983 に答える