0

fopen()の検索パスを設定して、ファイル名を入力するだけで、これらのパスでこのファイルを検索する方法はありますか?

f=fopen("xxx","r");

xxxを現在のディレクトリに入れないようにしたいだけで、ソースコードを変更したくありません。

4

2 に答える 2

1

いいえ、自分でコーディングする必要があります。何らかの理由でコードを変更できない場合は、ファイルシステムを変更できます。たとえば、Linuxでは、シンボリックリンク、bindマウント、FUSEなどを使用します。

ニーズに合わせて再定義することもできfopenます(ただし、これは行わないことをお勧めします)。Linuxでは、汚いLD_PRELOADトリックで「透過的」にすることさえできます。

于 2011-11-16T05:55:38.637 に答える
1

いいえ、fopen現在のディレクトリのみを検索します。ディレクトリのリストを指定することはできません。ただし、パスのリストを検索する場合は、次のようにします。

char *paths[] = {
    ".",
    "/etc",
    "/usr/local",
    NULL
};

FILE *fp = NULL;
char path[ENOUGH];

while (!fp && paths[i]) {
    sprintf(path, "%s/%s", paths[i], name);
    fp = fopen(path, "r");

    i++;
}
于 2011-11-16T05:55:46.577 に答える